屬性描述符數組
操做對象元屬性函數
特性名稱 | 描述 | 默認值 |
---|---|---|
value | 設置屬性的值 | undefined |
writable | 設置是否可修改值 | true |
enumerable | 表示可否經過 for-in 或 obj.keys()循環返回屬性。 | true |
configurable |
|
true |
var obj = { test: 'hello', }; //默認狀況下 var desc = Object.getOwnPropertyDescriptor(obj, 'test'); console.log(desc); // desc = { // configurable: true, // enumerable: true, // value: 'hello', // writable: true, // }
使用 對象字面量 建立的屬性,writable、enumerable 和 configurable 特性默認爲 true。this
特性名稱 | 描述 | 默認值 |
---|---|---|
Get | 在讀取屬性時調用的函數 | undefined |
Set | 在寫入屬性時調用的函數 | true |
enumerable | 屬性是否能夠被枚舉(使用 for...in 或 Object.keys()) | true |
configurable |
|
true |
var obj = { $n: 5, get next() { return this.$n++; }, set next(n) { if (n >= this.$n) this.$n += n; else throw new Error('新的值必須大於當前值'); }, }; obj.next = 6 console.log(obj.$n);
語法:code
Object.defineProperty(obj, prop, descriptor)
參數列表:對象
obj:必需。目標對象 prop:必需。需定義或修改的屬性的名字 descriptor:必需。目標屬性所擁有的特性
返回值:ip
傳入函數的對象。即第一個參數obj
var obj = {}; Object.defineProperty(obj, 'name', { get: function() { return this._name; //在 get 和 set 中使用訪問屬性必須加 "_" }, set: function(val) { if (Array.isArray(val)) { this._name = val; } else { this._name = '不是數組不能賦值'; } }, enumerable: true, // 表示可枚舉的 configurable: true, // 是否可刪除屬性 }); // Object {get: function, set: function, enumerable: true, configurable: true} console.log(Object.getOwnPropertyDescriptor(obj, 'name')); obj.name = '111'; console.log(obj.name);
var obj = {}; Object.defineProperties(obj, { name: { value: '周華健', writable: true, }, age: { value: 30, writable: true, }, sex: { get: function() { return this._sex; }, set: function(val) { if (val === 1) { this._sex = '男'; } else { this._sex = '女'; } }, }, }); obj.sex = 0; console.log(obj.sex); //女
參數:get
屬性所在的對象和要讀取其描述符的屬性名稱
返回值:it
//存取屬性 Object { configurable 、 enumerable 、 get 和 set} //數據屬性 Object {configurable 、 enumerable 、 writable 和 value}
var obj = { name: 'Timo', }; obj.sex = 'woman'; // 獲取單個屬性的描述符 var desc = Object.getOwnPropertyDescriptor(obj, 'sex'); // 獲取多個屬性的描述符 var descs = Object.getOwnPropertyDescriptors(obj); console.log(desc); console.log(descs);