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

lon*_*556 4 javascript fetch

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

稍微修改一下,它看起来像这样:

 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: ""

Run Code Online (Sandbox Code Playgroud)

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

resp.url 
>> ""
resp.url = 'www.test.com'
>> "www.test.com"
resp.url
>> ""
Run Code Online (Sandbox Code Playgroud)

那么如何设置url呢?

aps*_*ers 7

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

\n\n
Object.defineProperty(resp, "url", { value: "foobar" });\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

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

\n\n
Object.getOwnPropertyDescriptor(Object.getPrototypeOf(new Response()), \'url\')\n> {get: \xc6\x92, set: undefined, enumerable: true, configurable: true}\n
Run Code Online (Sandbox Code Playgroud)\n