网页设计学习笔记

HTML,CSS,JavaScript

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

在 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

posted on 2013-01-24 16:00  zoho  阅读(271)  评论(0编辑  收藏  举报