有没有办法让 Javascript 在将新属性添加到给定对象时抛出错误
Is there a way to have Javascript throw an error when a new property is added to a given object?
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中对此进行了测试。我也不介意特定于浏览器的解决方案,因为我只在开发过程中需要它。
如果严格模式是一个选项,Object.seal 似乎可以解决问题(至少在 Firefox 中是这样):
尝试删除或向密封对象添加属性,或者将数据属性转换为访问器,反之亦然,将以静默方式失败,或者通过引发 TypeError(在严格模式代码中最常见,但不完全是
)。
效果很好:http://jsfiddle.net/yVWr6/
(顺便说一句:对于 preventExtensions()的工作方式相同)
根据 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
相关文章:
- FabricJs-限制主对象内添加对象的移动区域
- 向Angular作用域对象添加对象数组——TypeError
- Javascript使用+添加对象
- 动态添加对象的jQuery事件处理程序
- 添加JQuery UI在Meteor中添加对象后可调整大小
- 在我的上下文中添加对象的动态方法
- 如何检测是否已使用 angular.forEach AngularJS 添加对象
- 在对象coffeescript中添加对象数组
- 使用Jquery在单击“”时显示表单;添加对象”;按钮
- 我可以向数组添加对象键吗
- 向扩展数组的JS集合添加对象(继承?)
- 尝试通过从自动完成推送添加对象时缺少 $$Hashkey
- 添加对象值 Javascript
- 在上传问题时添加对象
- 如何使用 javascript 的变量名称在数组中添加对象属性
- 在 JavaScript/TypeScript 中动态地“直接”添加对象属性到“this”
- 如何仅当对象不存在时才使用javascript添加对象
- 如何在数组末尾添加对象的副本
- rails在javascript url中添加对象
- ThreeJS-按不同顺序添加对象会影响alpha/显示