首页 > 解决方案 > 创建新的 Response() 时如何设置“url”?

问题描述

我正在按照这个示例为测试创建一个模拟响应。

稍作修改,它看起来像这样:

 var data = { foo: 'bar'};
 var blob = new Blob([JSON.stringify(data)], {type : 'application/json'});
 var init = { "status" : 200 , "statusText" : "SuperSmashingGreat!" };
 var resp = new Response(blob,init);

console.log(resp.url)

body: (...)
bodyUsed: true
headers: Headers {}
ok: true
redirected: false
status: 200
statusText: "SuperSmashingGreat!"
type: "default"
url: ""

这很好地模拟了数据和状态但是,我也想模拟resp.url我不知道如何使用构造函数设置它并且[因为它是只读的]我不能在 resp 本身上设置它

resp.url 
>> ""
resp.url = 'www.test.com'
>> "www.test.com"
resp.url
>> ""

那么如何设置网址呢?

标签: javascriptfetch

解决方案


由于url实际上是由继承的 getter 定义的,因此您可以使用Object.definedProperty直接在您的Response实例上定义一个简单的 value 属性,它会隐藏继承的 getter 属性:

Object.defineProperty(resp, "url", { value: "foobar" });

为了您自己的理解,您可以通过查看以下属性描述符来查看继承的 getter Response.prototype.url

Object.getOwnPropertyDescriptor(Object.getPrototypeOf(new Response()), 'url')
> {get: ƒ, set: undefined, enumerable: true, configurable: true}

推荐阅读