属性形容对象
Object.getOwnPropertyDescriptor()
Object.getOwnPropertyDescriptor()
办法能够获取属性形容对象。它的第一个参数是指标对象,第二个参数是一个字符串,对应指标对象的某个属性名。
var obj = {p: 'a'};
Object.getOwnPropertyDescriptor(obj, 'p')
// Object { value: "a",
// writable: true,
// enumerable: true,
// configurable: true
// }
下面代码中,Object.getOwnPropertyDescriptor()
办法获取 obj.p
的属性形容对象。
Object.getOwnPropertyNames()
Object.getOwnPropertyNames
办法返回一个数组,成员是参数对象本身的全副属性的属性名,不论该属性是否可遍历。
var obj = Object.defineProperties({}, {p1: { value: 1, enumerable: true},
p2: {value: 2, enumerable: false}
});
Object.getOwnPropertyNames(obj)
// ["p1", "p2"]
Object.prototype.propertyIsEnumerable()
var obj = {};
obj.p = 123;
obj.propertyIsEnumerable('p') // true
obj.propertyIsEnumerable('toString') // false
下面代码中,obj.p
是可遍历的,而 obj.toString
是继承的属性。
Object.preventExtensions() #
Object.preventExtensions
办法能够使得一个对象无奈再增加新的属性。
var obj = new Object();
Object.preventExtensions(obj);
Object.defineProperty(obj, 'p', {value: 'hello'});
// TypeError: Cannot define property:p, object is not extensible.
obj.p = 1;
obj.p // undefined
Object.isExtensible() #
Object.isExtensible
办法用于查看一个对象是否应用了 Object.preventExtensions
办法。
var obj = new Object();
Object.isExtensible(obj) // true
Object.preventExtensions(obj);
Object.isExtensible(obj) // false
Object.seal() #
Object.seal
办法使得一个对象既无奈增加新属性,也无奈删除旧属性。
var obj = {p: 'hello'};
Object.seal(obj);
delete obj.p;
obj.p // "hello"
obj.x = 'world';
obj.x // undefined
Object.isSealed() #
Object.isSealed
办法用于查看一个对象是否应用了 Object.seal
办法。
var obj = {p: 'a'};
Object.seal(obj);
Object.isSealed(obj) // true
Object.freeze()
Object.freeze
办法能够使得一个对象无奈增加新属性、无奈删除旧属性、也无奈扭转属性的值,使得这个对象实际上变成了常量。
var obj = {p: 'hello'};
Object.freeze(obj);
obj.p = 'world';
obj.p // "hello"
obj.t = 'hello';
obj.t // undefined
delete obj.p // false
obj.p // "hello"
Object.isFrozen() #
Object.isFrozen
办法用于查看一个对象是否应用了 Object.freeze
办法。
var obj = {p: 'hello'};
Object.freeze(obj);
Object.isFrozen(obj) // true