1.获得属性名称
var o = {
p1: 123,
p2: 456
};
Object.keys(o);//获得可枚举的属性名称
// ["p1", "p2"]
Object.getOwnPropertyNames(o); //获得全部属性名称
// ["p1", "p2"]
2.获得属性的信息描述
var o = { p: ‘a‘ };
Object.getOwnPropertyDescriptor(o, ‘p‘)
// Object { value: "a", writable: true, enumerable: true, configurable: true }
3.定义一个属性
Object.defineProperty(object, propertyName, attributesObject)
第一个参数是目标对象,第二个参数是属性名称,第三个时属性描述
var o = Object.defineProperty({}, "p", {
value: 123,
writable: false, //是否可写
enumerable: true,
configurable: false });
o.p // 123
o.p = 246;
o.p // 123 // 因为writable为false,所以无法改变该属性的值
定义多个属性
var o = Object.defineProperties({}, {
p1: { value: 123, enumerable: true },
p2: { value: "abc", enumerable: true },
p3: {
//get: function() { return this.p1+this.p2 },
value: this.p1+this.p2,
enumerable:true,//是否可枚举
configurable:true //是否可修改属性描述
}
}); o.p1 // 123 o.p2 // "abc" o.p3 // "123abc"
注意,get不能和value或writable同时出现来描述统一属性
4.属性是否可枚举的检查
Object.prototype.propertyIsEnumerable() user.propertyIsEnumerable(‘toString‘);
5.禁止对象动态扩展
Object.preventExtensions(object);
var o = new Object(); Object.isExtensible(o) // true Object.preventExtensions(o); Object.isExtensible(o)
6.冻结对象,使其成为常量对象(无法扩展属性和方法)
var o = {p:"hello"};
Object.freeze(o);
o.p = "world";
o.p
// hello
o.t = "hello";
o.t // undefined
原文:http://my.oschina.net/ososchina/blog/350383