Javascript中的Object.defineProperty()

參考文章(推薦!推薦!):JavaScript中的Object.defineProperty()和defineProperties()segmentfault

總結起來就是:bash

一:ECMAScript中存在兩種屬性描述符:

一、數據描述符(數據屬性):可寫或不可寫(Configurable、Enumerable、Writable、Value)函數

二、存取描述符(訪問器屬性):getter-setter函數功能(Configurable、Enumerable、Get、Set)ui

二:定義屬性和獲取屬性的方法

一、定義和修改屬性的方法:defineProperty和definePropertiesspa

Object.defineProperty(obj,prop,descriptor) //分別是被操做對象,對象的名稱,屬性的描述符

Object.defineProperties(obj,props) //分別是被操做對象,該對象的屬性配置
複製代碼

二、獲取內部屬性的方法:getOwnPropertyDescriptor和getOwnPropertyDescriptors3d

Object.getOwnPropertyDescriptor(obj,prop)

Object.getOwnPropertyDescriptors(obj)複製代碼

三:擴展實例

一、configurable設置爲false,不可delete,不可改變writable(是false的時候;若是writable爲true,能夠修改writable和value的屬性)code

四:對象中添加存取屬性

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複製代碼

一、gettter和setter在嚴格模式下不一樣時使用回拋出錯誤cdn

二、數據描述符和存取描述符不能混用。對象

5、全局環境

相關文章
相關標籤/搜索