Object.preventExtensions和Object.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中对此进行了测试。我也不介意浏览器特定的解决方案,因为我在开发过程中只需要这个。
答案 0 :(得分:1)
如果选择严格模式,Object.seal似乎可以解决问题(至少在Firefox中):
尝试删除或向密封对象添加属性,或者将数据属性转换为访问者或反之亦然,将无声或者通过抛出TypeError(最常见,尽管不是唯一的,在严格模式代码中)失败
效果很好:http://jsfiddle.net/yVWr6/
(顺便说一句:对于preventExtensions()的工作方式相同)
答案 1 :(得分:1)
根据MDN documentation for 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