Note - 重新認識javascript (7)
更新時間: 2021/12/20
屬性描述器 (Property descriptor)
屬性描述器一共可以分為六種:
value: 屬性的值writable: 定義屬性是否可以改變,如果是false那就是唯讀屬性enumerable: 定義物件內的屬性是否可以透過for-in語法來迭代configurable: 定義屬性是否可以被刪除、或修改屬性內的writable、enumerable及configurable設定get: 物件屬性的 getter functionset: 物件屬性的 setter function
Object.defineProperty 與 Object.getOwnPropertyDescriptor
var rabbit = { name: 'yuan' };
console.log(Object.getOwnPropertyDescriptor(bunny, 'name'))
// {"value": "yuan",
// "writable": true,
// "enumerable": true,
// "configurable": true }
var bunny = {};
Object.defineProperty(bunny, 'name', {
value: 'yuan'
});
console.log(Object.getOwnPropertyDescriptor(bunny, 'name'))
// {"value": "yuan",
// "writable": false,
// "enumerable": false,
// "configurable": false }
defineProperty 可以針對物件一次設定多個屬性描述:
var bunny = {};
Object.defineProperty(bunny, 'name', {
value: 'yuan',
writable: false,
enumerable: false,
configurable: false
});
console.log(delete bunny.name) // false
屬性的 get 與 set 方法
var bunny = {};
Object.defineProperty(person, 'name', {
get: function(){
console.log('get');
return this._name_;
},
set: function(name){
console.log('set');
this._name_ = name;
}
});
bunny.name = 'yuan'; // 'set'
console.log(bunny.name); // 'get' 'yuan'