ES5 defineProperty 简单讲解

1
2
3
4
5
6
7
8
9
10
11
12
13
data = {};
_data = {key: 'value'};
Object.defineProperty(data, 'key', {
get: function(){
return _data['key'];
},
set: function(value){
_data['key'] = value;
console.log('set prop key to ' + value);
},
enumerable: true,
configurable: false
});
  • configurable
    true当且仅当此属性描述符的类型可能被改变并且该属性可以从相应的对象被删除时。
    默认为false。

  • enumerable
    true如果且仅当此属性在对相应对象的属性枚举期间显示。
    默认为false。

数据描述符还具有以下可选键:

  • value
    与属性关联的值。可以是任何有效的JavaScript值(数字,对象,函数等)。
    默认为undefined。

  • writable
    true当且仅当与属性相关联的值可以与改变赋值运算。
    默认为false。

访问器描述符还具有以下可选键:

  • get
    其用作属性的吸气剂的函数,或者undefined如果没有吸气。函数返回将用作属性的值。
    默认为undefined。

  • set
    它作为对属性的设置的函数,或者undefined如果没有二传手。该函数将仅接收作为参数的新值分配给属性。
    默认为undefined。