-1
試圖找出URL()構造函數(以及其他本機JavaScript API)幕後發生了什麼。當我嘗試創建一個正常的道具也有一個setter一個對象,我得到的錯誤:Javascript的URL()構造函數如何在幕後工作(getter/setter怪異)
Uncaught TypeError: Invalid property descriptor. Cannot both specify accessors and a value or writable attribute
但隨着實例化一個新的URL(),您可以註銷的對象注意到,看到一切正常enumerable道具,但這些相同的道具有自定義設置行爲:
const u = new URL('http://google.com/example/path');
console.log(u);
{
// all of these are normal props:
hostname: 'google.com',
pathname: '/example/path',
href: 'http://google.com/example/path'
}
u.pathname = '/new-example/path';
console.log(u);
{
// notice that pathname AND href have changed, presumably from setter
// behavior, but they're still regular, enumerable, non-getter props:
hostname: 'google.com',
pathname: '/new-example/path',
href: 'http://google.com/new-example/path'
}
說明會很好或指向URL()源...謝謝!
_「他們仍然有規律,可枚舉,非吸道具」 _沒有,如果你看的原型,你會看到他們是getter和setter方法,HTTPS: //i.imgur.com/VoBySrYl.jpg。如果你看看[WhatWG規範](https://url.spec.whatwg.org/#api),你會看到他們引用每個屬性的getter/setter –
@PatrickEvans,但是如果你使用console.log對象,則道具本身就是字符串;我看到原型有getter/setter。當我嘗試複製這個實現時,我的實例對象在實例上具有getter/setter函數* – Codosapien
原型包含實例獲得的方法....您將道具視爲字符串,因爲這是獲取器返回的值 –