訪問(wèn)器屬性有兩個(gè)附加屬性。
因?yàn)闆](méi)有為存取器屬性存儲(chǔ)值,所以不需要[[Value]]或[[Writable]]。
相反,訪問(wèn)器有[[Get]]和[[Set]],它們分別包含getter和setter函數(shù)。
我們只需要定義這些屬性之一來(lái)創(chuàng)建屬性。如果我們只定義[[Get]]屬性是可讀的,或者我們可以使用[[Set]]來(lái)設(shè)置屬性可寫(xiě)。
如果您嘗試創(chuàng)建具有數(shù)據(jù)和訪問(wèn)器屬性的屬性,您將獲得一個(gè)錯(cuò)誤。
通過(guò)使用訪問(wèn)器屬性屬性而不是對(duì)象我們可以定義的文字符號(hào)現(xiàn)有對(duì)象上的那些屬性。
要使用對(duì)象字面符號(hào),我們必須在創(chuàng)建對(duì)象時(shí)定義訪問(wèn)器屬性。
我們可以指定訪問(wèn)器屬性是可配置還是可枚舉。
下面的代碼
var book1 = {
_name : "Javascript",
/*from w w w.j a va 2 s .c om*/
get name() {
console.log("Reading name");
return this._name;
},
set name(value) {
console.log("Setting name to %s", value);
this._name = value;
}
};
可以寫(xiě)成:
var book1 = {
_name : "Javascript"
}; /*from w w w .j a va 2 s . c o m*/
Object.defineProperty(book1, "name", {
get : function() {
console.log("Reading name");
return this._name;
},
set : function(value) {
console.log("Setting name to %s", value);
this._name = value;
},
enumerable : true,
configurable : true
});
設(shè)置其他屬性([[Ienumerable]]和[[Configurable]])允許您可以更改評(píng)估者屬性的工作原理。
我們可以創(chuàng)建一個(gè)不可配置,不可數(shù),不可寫(xiě)的屬性,如下所示:
var book1 = {
_name : "Javascript"
}; /*w w w . ja v a 2s. co m*/
Object.defineProperty(book1, "name", {
get : function() {
console.log("Reading name");
return this._name;
}
});
console.log("name" in book1); // true
console.log(book1.propertyIsEnumerable("name")); // false
delete book1.name;
console.log("name" in book1); // true
book1.name = "CSS";
console.log(book1.name); // "Javascript"
上面的代碼生成以下結(jié)果。
更多建議: