JS對象
一、屬性類型
數據屬性
[[Configurable]]
表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,能否把屬性修改爲訪問器屬性。直接在對象上定義的屬性,默認值爲true。[[Enumerable]]
表示能否通過for-in
循環返回屬性。直接在對象上定義的屬性,默認值爲true。[[Writable]]
表示能否修改屬性的值。直接在對象上定義的屬性,默認爲true。[[Value]]
包含這個屬性的數據值;讀取屬性值的時候,從這個位置讀取;寫入屬性值的時候,把值保存在這裏。默認爲undefined。
訪問器屬性- 屬性有getter和setter方法,(讀/寫屬性)。
[[Configurable]]
表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,能否把屬性修改爲訪問器屬性。直接在對象上定義的屬性,默認值爲true。[[Enumerable]]
表示能否通過for-in
循環返回屬性。直接在對象上定義的屬性,默認值爲true。[[get]]
在讀取屬性時調用的函數;默認值爲undefined。[[set]]
在寫入屬性時調用的函數;默認值爲undefined。
Object.defineProperty(obj, prop, descriptor)
:方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性, 並返回這個對象。var person = {} Object.defineProperty(person, 'name', { writable:false, value:jiaying }); person.name = zeqing //嚴格模式下報錯
Object.defineProperties(obj, props)
:方法直接在一個對象上定義新的屬性或修改現有屬性,並返回該對象。var person = {} var obj = {}; Object.defineProperties(obj, { 'property1': { value: true, writable: true }, 'property2': { value: 'Hello', writable: true }, 'property3': { get: function() { return this['property2'] }, set: function(newValue) { this['property2'] = newValue; this['property1'] = false; } } // etc. etc. })
-
Object.getOwnPropertyDescriptor(obj, prop)
方法,可以取得給定屬性的描述符var person = {}; Object.defineProperties(person, { _name: { value: "CC", writable: false }, _age: { value: 23, writable: true }, age: { get: function() { return this._age }, set: function(newValue) { this._age = newValue; } } }); var descriptor = Object.getOwnPropertyDescriptor(person, "_age"); console.log(descriptor.value); //"23" console.log(descriptor.writable); //true