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

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}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值