【问题标题】:How to allow to add property on object but stop Modifying set of properties on object如何允许在对象上添加属性但停止修改对象上的属性集
【发布时间】:2017-08-11 15:33:01
【问题描述】:

我有一些全局对象 CD,它的属性集如下:

window.cd = {
  config:{
    title:"..."
  }
  a:func..., 
  b:56,
  c:..
}

我希望用户允许向 cdcd.config 添加属性,但要密封属性 cd.a, cd.b, cd.config.title(不允许修改)。

用户不能同时删除 window.cd 或这些属性(他可以删除或修改的其他属性)。

我尝试了以下方法:

window.cd.a.seal();
window.cd.b.seal();
window.cd.config.title.seal();

但它引发了以下错误:

window.cd.config.title.seal 不是函数

【问题讨论】:

  • Object.seal 是函数 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…String.seal 不是(window.cd.config.title 是字符串)
  • 那么如何实现我的要求我想阻止用户修改标题。
  • 你必须密封一个对象,而不是它的个别属性。此外,密封不会阻止属性值的更改,它只会阻止添加或更改属性。也许您想将它们标记为不可写developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
  • @JasonFetterly 以及如何防止 cd 与定义属性一起删除。
  • 你不能阻止 window.cd 被删除,除非你把它放在另一个对象里面 - 'window' 不能被密封。

标签: javascript object defineproperty seal


【解决方案1】:

使标题不可写的快速示例

"use strict";
// Use strict mode or assignments to nonwritable properties silently fail

window.cd = {
  config:{
    title:'mytitle'
  },
  a:12,
  b:56
}

console.log(cd.config.title)
Object.defineProperty(cd.config,'title',{writable:false});
cd.config.title="Test";  // Fails, throws exception if Strict mode
console.log(cd.config.title)

【讨论】:

  • Object.seal(cd.config) 将防止删除任何配置属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 2022-06-12
  • 2020-03-09
  • 2021-05-15
  • 1970-01-01
相关资源
最近更新 更多