乐趣区

关于javascript:笔记

属性形容对象

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
退出移动版