【问题标题】:handle undefined properties before they 'fail'在它们“失败”之前处理未定义的属性
【发布时间】: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 中。

标签: javascript event-handling


【解决方案1】:

试试这个:

if(myObj.hasOwnProperty(x)) {
    myObj[x];
}

【讨论】:

  • 已编辑问题以解释为什么您的答案不适用于我的情况。不过,解决一般问题的公平答案。
【解决方案2】:
try {
  myObj.myOtherFunc();
} catch() {

}

myObj.myOtherFunc() || ""; //default value;

myObj.myOtherFunc() || myObj.myDefinedFunc(); //default value;

if (var t = myObj.myOtherFunc())
  // something
else
  // something else

【讨论】:

  • 感谢您的回答,但是,这对我不起作用,因为我无法更改调用代码。我只能更改 myObj 中的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
相关资源
最近更新 更多