參考文章(推薦!推薦!):JavaScript中的Object.defineProperty()和defineProperties()
總結起來就是:
一:ECMAScript中存在兩種屬性描述符:
1、資料描述符(資料屬性):可寫或不可寫(Configurable、Enumerable、Writable、Value)
2、存取描述符(訪問器屬性):getter-setter函式功能(Configurable、Enumerable、Get、Set)
二:定義屬性和獲取屬性的方法
1、定義和修改屬性的方法:defineProperty和defineProperties
Object.defineProperty(obj,prop,descriptor) //分別是被操作物件,物件的名稱,屬性的描述符
Object.defineProperties(obj,props) //分別是被操作物件,該物件的屬性配置
複製程式碼
2、獲取內部屬性的方法:getOwnPropertyDescriptor和getOwnPropertyDescriptors
Object.getOwnPropertyDescriptor(obj,prop)
Object.getOwnPropertyDescriptors(obj)複製程式碼
三:擴充套件例項
1、configurable設定為false,不可delete,不可改變writable(是false的時候;如果writable為true,可以修改writable和value的屬性)
四:物件中新增存取屬性
var obj = {};
var avalue;
var b;
Object.defineProperty(obj,'a', {
configurable: true,
enumrable: true,
get: function() {
return avalue
},
set: function(newvalue) {
avalue = newvalue
b = newvalue + 1
}
});
console.log(b); //undefined
console.log(obj.a); //undefined
obj.a = 2;
console.log(obj.a); //2
console.log(b); //3複製程式碼
1、gettter和setter在嚴格模式下不同時使用回丟擲錯誤
2、資料描述符和存取描述符不能混用。