【发布时间】:2014-04-15 03:38:07
【问题描述】:
如果可能的话,我想在我的对象失败/返回未定义之前处理它们上的未定义属性和/或标识符。
有没有一种巧妙的方法来捕获对未定义属性的访问并在不使用 try/catch 的情况下对其进行处理?
var myObj = {
myVar : 10,
myFunc : function(){console.log('foo')
}
myObj.myVar;
myObj.myFunc();
var x = "myFunc";
myObj[x];
x = "myOtherFunc";
// Handle this in an eventhandler or similar before it fails!?!?
myObj[x];
我无法从我的位置更改调用代码。我只能更改 myObj 中的代码,因为它是其他人使用的模块。
【问题讨论】:
-
究竟是什么失败了?您可以从对象中获取未定义的属性而不会出错——
console.log({}.foo) // undefined。如果需要使用该值,可以先查看它是否存在:if (x in myObj) myObj[x]...Determining if a javascript object has a given property。 -
不,在 javascript 中没有像
__call这样的东西,跟踪你所拥有的,你应该没问题。 -
@JonathanLonowski 好吧,我处于无法更改 myObj 之外的代码的位置,因此我无法在调用之前检查 x 是否存在于 myObj 中。