创建新的Response()时如何设置“ URL”?

时间:2019-06-18 17:17:33

标签: javascript fetch

我正在按照this的示例为测试创建模拟的响应。

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

 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本身上进行设置< / p>

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

那我该如何设置网址?

1 个答案:

答案 0 :(得分:1)

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

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

根据您自己的理解,可以通过查看Response.prototype.url的属性描述符来看到继承的getter:

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