ECMAScript5 对象的属性操作

在 ECMAScript 5 中,与对象的属性有关的方法有这些:Object.prototype.hasOwnProperty,Object.defineProperty,Object.defineProperties,Object.getOwnPropertyNames 和 Object.getOwnPropertyDescriptor。除了第一个在 ECMAScript 3 中就已经出现,其它的都是新增的方法。

Object.prototype.hasOwnProperty 方法用于检测某个属性是对象自己的,还是从原型中继承来的。例如:

o = {abc: 123};

console.log(o.hasOwnProperty('abc'));      // true

console.log(o.hasOwnProperty('toString')); // false

Object.defineProperty 用于对增加或者修改某个对象的属性,并且可以设置更多的控制选项。例如:

o = {};

Object.defineProperty(o, 'abc', {

  value: 123,

  writable: false,

  enumerable: true,

  configurable: false

});

o.abc = 456;

delete o.abc;

console.log(o.abc); // 123

其中 value 选项指明该属性 abc 的值,writable 选项指明该属性的值是否可以修改,enumerable 选项设置该属性是否在 for (key in o) {} 循环中列出。而 configurable 选项设置为 false 时该属性不可以删除,而且 enumerable 和 configurable 这两个选项也不可以修改,而 writable 选项只能从 true 改为 false。后面三个选项的默认值都是 false。

Object.defineProperties 和 Object.defineProperty 类似,只是它可以同时定义或修改多个属性。例如:

var o = {};

Object.defineProperties(o, {

  "abc": {

    value: 123,

    writable: true

  },

  "uvw": {

    value: "test",

    writable: false

  }

});

Object.getOwnPropertyNames 方法用于列出对象的所有自带属性的名称,并作为一个数组返回。例如:

var obj = { 'abc': 10, 'opq': 100, 'uvw': 1000};

console.log(Object.getOwnPropertyNames(obj)); // ["abc", "opq", "uvw"]

Object.getOwnPropertyDescriptor 方法用于列出对象的某个属性的各个选项。例如:

o = {};

Object.defineProperty(o, 'abc', {

  value: 123,

  writable: false,

  enumerable: true,

  configurable: false

});

console.log(Object.getOwnPropertyDescriptor(o, 'abc')); 

// Object {value: 123, writable: false, enumerable: true, configurable: false}

后面这四个 ECMAScript 5 的方法在 IE9,Firefox 4,Safari 5,Chrome 5,Opera 12 中都可以使用。

参考资料:
[1] ECMAScript 5 compatibility table
[2] hasOwnProperty - JavaScript | MDN
[3] John Resig - ECMAScript 5 Objects and Properties
[4] Object.defineProperty - JavaScript | MDN
[5] Object.defineProperty Function (JavaScript) - MSDN
[6] defineProperties - JavaScript | MDN
[7] getOwnPropertyNames - JavaScript | MDN
[8] Object.getOwnPropertyDescriptor - JavaScript | MDN

你可能感兴趣的:(ECMAScript)