禁止对象属性扩展、密封对象、冻结对象

Object.defineProperty(obj, prop, descriptor)

var obj = {
     };
Object.defineProperty(obj, "key", {
     
  enumerable: false,
  configurable: false,
  writable: false,
  value: "static"
});
  • configurable(false): 当且仅当该属性的 configurable 键值为 true 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。
  • enumerable(false): 当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。
  • writable(false): 当且仅当该属性的 writable 键值为 true 时,属性的值,也就是上面的 value,才能被赋值运算符改变。
  • value(undefined): 该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。
  • get(undefined): 属性的 getter 函数,如果没有 getter,则为 undefined。当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入 this 对象(由于继承关系,这里的this并不一定是定义该属性的对象)。该函数的返回值会被用作属性的值。
  • set(undefined): 属性的 setter 函数,如果没有 setter,则为 undefined。当属性值被修改时,会调用此函数。该方法接受一个参数(也就是被赋予的新值),会传入赋值时的 this 对象。

Object.defineProperties(obj, prop)

var obj = {
     };
Object.defineProperties(obj, {
     
  'property1': {
     
    value: true,
    writable: true
  },
  'property2': {
     
    value: 'Hello',
    writable: false
  }
});

禁止属性扩展(Object.isExtensible && Object.preventExtensions)

1. Object.isExtensible()方法判断一个对象是否是可扩展的(是否可以在它上面添加新的属性)。

2. Object.preventExtensions()方法让一个对象变的不可扩展,也就是永远不能再添加新的属性,并且返回原对象。

var empty = {
      key: '123' };
Object.preventExtensions(empty);
Object.isExtensible(empty); // false
console.log(Object.getOwnPropertyDescriptor(empty, 'key')); // {value: "123", writable: true, enumerable: true, configurable: true}

密封对象(Object.isSealed && Object.seal)

1. Object.isSealed()方法判断一个对象是否是密封的。

2. Object.seal()方法可以让一个对象密封,并返回被密封后的对象。

var empty = {
      key: '123' };
Object.seal(empty);
Object.isSealed(empty); // true
console.log(Object.getOwnPropertyDescriptor(empty, 'key')); // {value: "123", writable: true, enumerable: true, configurable: false}

冻结对象(Object.isFrozen && Object.freeze)

1. Object.isFrozen()方法判断一个对象是否被冻结。

2. Object.freeze()方法可以冻结一个对象。

var empty = {
      key: '123' };
Object.freeze(empty);
Object.isFrozen(empty); // true
console.log(Object.getOwnPropertyDescriptor(empty, 'key')); // {value: "123", writable: false, enumerable: true, configurable: false}

你可能感兴趣的:(Javascript,javascript)