get
定義了一個屬性存取器函數。當o
的foo
屬性的值被檢索,雖然它並不像在代碼的函數調用該函數甚至稱,如:
var a = o.foo; // Note that `foo` doesn't have() after it, it's not a function call
在這種情況下,它總是返回17,但它可以做其他的事情。例如,考慮一個圓圈:
var circle = {
radius: 7,
get circumference() { return 2 * Math.PI * this.radius; },
get area() { return Math.PI * this.radius * this.radius; }
};
console.log(circle.circumference); // 43.982297150257104
console.log(circle.area); // 153.93804002589985
circle.radius = 4;
console.log(circle.circumference); // 25.132741228718345
console.log(circle.area); // 50.26548245743669
正如你可以看到,當我們訪問我們與存取定義的兩個屬性,分配給他們的函數被調用,即使屬性訪問看起來並不像一個函數呼叫。
您也可以在設置爲時調用函數。不出所料,您使用set
而不是get
來做到這一點。 :-)
您可以在規範的object initializers部分和on MDN中閱讀更多信息。
Object.getOwnPropertyDescriptor
調用返回描述您請求的屬性的對象(在本例中爲foo
)。你可以閱讀更多關於它in the spec和on MDN以及。
從MDN引用:
的屬性描述符是記錄(TJC:例如,對象)一些以下屬性:
value
與屬性(僅相關聯的數據描述符的值)。
writable
true
當且僅當與該屬性相關聯的值可能被更改(僅限數據描述符)。
get
作爲屬性吸氣劑的功能,或者如果沒有吸氣劑(僅存取器描述符),則爲undefined
。
set
一個函數,用作屬性的setter,或undefined
如果沒有setter(僅用於存取器描述符)。
configurable
true
當且僅當該屬性描述符的類型可能會改變,並且該屬性可能從相應的對象中刪除。
enumerable
true
當且僅當在枚舉相應對象上的屬性期間顯示此屬性。
downvoter會分享爲什麼這是「無用」嗎? – 2013-04-28 16:47:56
據我所知,看起來是正確的。 +1 – 2013-04-28 16:48:51