2017-10-21 67 views
-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()源...謝謝!

+0

_「他們仍然有規律,可枚舉,非吸道具」 _沒有,如果你看的原型,你會看到他們是getter和setter方法,HTTPS: //i.imgur.com/VoBySrYl.jpg。如果你看看[WhatWG規範](https://url.spec.whatwg.org/#api),你會看到他們引用每個屬性的getter/setter –

+0

@PatrickEvans,但是如果你使用console.log對象,則道具本身就是字符串;我看到原型有getter/setter。當我嘗試複製這個實現時,我的實例對象在實例上具有getter/setter函數* – Codosapien

+0

原型包含實例獲得的方法....您將道具視爲字符串,因爲這是獲取器返回的值 –

回答