Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在未定义属性之前处理它们';失败';_Javascript_Event Handling - Fatal编程技术网

Javascript 在未定义属性之前处理它们';失败';

Javascript 在未定义属性之前处理它们';失败';,javascript,event-handling,Javascript,Event Handling,如果可能的话,我希望在对象失败/返回未定义的属性和/或标识符之前处理它们 是否有一种简洁的方法可以捕获对未定义属性的访问并在不使用try/catch的情况下处理它 var myObj = { myVar : 10, myFunc : function(){console.log('foo') } myObj.myVar; myObj.myFunc(); var x = "myFunc"; myObj[x]; x = "myOtherFunc"; // Handle this

如果可能的话,我希望在对象失败/返回未定义的属性和/或标识符之前处理它们

是否有一种简洁的方法可以捕获对未定义属性的访问并在不使用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内部的代码,因为它是其他人使用的模块。

试试这个:

try {
  myObj.myOtherFunc();
} catch() {

}

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

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

if (var t = myObj.myOtherFunc())
  // something
else
  // something else
if(myObj.hasOwnProperty(x)) {
    myObj[x];
}

到底什么失败了?您可以从对象获取未定义的属性,而不会出现错误--
console.log({}.foo)//undefined
。如果您需要使用该值,您可以先查看它是否存在:
If(myObj中的x)myObj[x]…
。不,javascript中没有类似的东西,请跟踪您拥有的内容,您应该会很好。@JonathanLonowski,我无法在myObj之外修改代码,因此我无法在调用myObj之前检查myObj中是否存在x。编辑问题以解释为什么您的答案不适用于我的案例。一般来说,这个问题的答案是公平的。谢谢你的回答,但是,这对我来说不起作用,因为我不能更改呼叫代码。我只能更改myObj内部的代码