首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果对象冻结后添加新属性,则抛出错误

问如果对象冻结后添加新属性,则抛出错误
EN

Stack Overflow用户
提问于 2016-05-14 06:13:37
回答 2查看 114关注 0票数 2

使用JavaScript/Node.js,如果对象在冻结后被修改,是否可能抛出错误?我想把一个不可变的属性放在一个对象上,同时防止对象被重新赋值。

在本例中,我正在编写一个库,并且我需要赋值module.exports = x;是不可变的。

我想防止用户向x添加属性,以及防止module.exports被重新分配。不仅如此,如果用户尝试上面的操作,我想抛出一个错误,而不是无声的错误,这是可能的吗?

EN

回答 2

Stack Overflow用户

发布于 2016-05-14 06:18:19

如果用户代码在严格模式下运行,它将自动抛出错误。

​

代码语言:javascript
复制
function log(obj) {
  document.querySelector('pre').innerText += JSON.stringify(obj, null, 2) + '\n';
}

function nonStrict(obj) {
  obj.b = 2;
  log(obj);
}

function strict(obj) {
  'use strict';
  try {
    obj.b = 2;
  } catch(e) {
    log(e.message);
  }
}

var obj = {
  a: 1
};
Object.freeze(obj);
nonStrict(obj);
strict(obj);
代码语言:javascript
复制
<pre></pre>

​

票数 2
EN

Stack Overflow用户

发布于 2016-05-14 06:32:01

您可以使用Object.freeze(x);。

例如在模块foo.js中

代码语言:javascript
复制
var foo = {id: 42};

Object.freeze(foo);

module.exports = foo;

在模块bar.js中,您会得到错误。

代码语言:javascript
复制
'use strict';

var foo = require('./foo');

foo.bar = 42; // TypeError: Can't add property bar, object is not extensible

请注意,要抛出错误,您需要使用严格模式。如果您不使用它,对象将继续是不可变的,但它只是不会抛出错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37220093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档