Javascript中的Object.defineProperty()

Jsp發表於2019-02-28

參考文章(推薦!推薦!):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、資料描述符和存取描述符不能混用。

五、全域性環境

Javascript中的Object.defineProperty()

相關文章