max*_*son 2 javascript oop error-handling undefined
我不想检查一个对象是否被定义,而是希望能够简单地在其上调用一个方法,并且如果该对象实际上是未定义的,则让它无声地失败.所以,而不是必须写下面的内容:
if(obj.delegate && obj.delegate.closeMenu){
obj.delegate.closeMenu();
}
Run Code Online (Sandbox Code Playgroud)
我可以在if声明中写下这句话:obj.delegate.closeMenu().如果obj没有委托属性,就不会发生任何事情.如果delegate存在同样的事情,但它没有closeMenu()方法.
这可能吗?如果是,请提供实施.
目前没有可靠的方法来做到这一点,而无需编写更多代码.您可以使用try- catch,例如:
try {
obj.delegate.closeMenu();
} catch(e) {
// fail silently
}
Run Code Online (Sandbox Code Playgroud)
请注意,非标准__noSuchMethod__可以满足您的需求,但并不是所有地方都支持.
更新:在ES6中,您可以使用代理执行类似的操作.例如:
function getProperty(target, name, receiver) {
if (name in target) {
return target[name];
}
// property does not exist
var result = doSomethingElse();
return result;
}
var object = return Proxy(something, {
'get': getProperty
});
Run Code Online (Sandbox Code Playgroud)