属性形容对象
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') // trueobj.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) // trueObject.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 // undefineddelete obj.p // falseobj.p // "hello"
Object.isFrozen() #
Object.isFrozen
办法用于查看一个对象是否应用了Object.freeze
办法。
var obj = { p: 'hello'};Object.freeze(obj);Object.isFrozen(obj) // true