3

Object.preventExtensionsObject.seal防止将未知属性添加到对象中,但这些属性会默默地失败而不是引发错误。有没有办法强迫他们犯错误?

var myObj = Object.seal({});
try{
    myObj.someProp = 17;
    console.log("I don't want to reach this message");
}catch(err){
    console.log("I want an error to occur instead.")
    console.log("Or at least get a warning somewhere.");
}

我在 Chrome 19 和 Firefox 9 中对此进行了测试。我也不介意特定于浏览器的解决方案,因为我只在开发过程中需要它。

4

2 回答 2

1

根据(and ) 的MDN 文档,Object.seal()Object.freeze()如果您启用严格模式,则在尝试修改密封对象时将引发 TypeError:

function go() {
  'use strict';
  var x = {};
  Object.seal(x);
  x.foo = 123;
}
go(); // => TypeError: Can't add property foo, object is not extensible
于 2012-06-14T23:39:29.447 回答
1

如果严格模式是一个选项, Object.seal 似乎可以解决问题(至少在 Firefox 中):

尝试删除或添加属性到密封对象,或将数据属性转换为访问器,反之亦然,将失败,无论是静默还是抛出 TypeError(最常见,但不是唯一的,在严格模式代码中)。

效果很好:http: //jsfiddle.net/yVWr6/

(顺便说一句:对于 preventExtensions() 的工作方式相同)

于 2012-06-14T23:38:19.323 回答