以前,JS有Object.prototype.__ noSuchMethod __来处理不存在的方法,所以你可以根据OOP将方法用作消息。
不幸的是,它现在已被弃用。替换的是Proxy对象。但是,仅对函数而不是对象应用处理程序 catch 调用,因此您无法捕获不存在的方法。
您可以使用 get 处理程序,但您不知道是否应该返回某个函数或值,或者什么也不返回,只是做一些事情。您没有名称访问上下文。
那么,有什么想法如何在没有显式检查的情况下处理不存在的方法吗?
最佳答案
您无法获得 Object.prototype.__ noSuchMethod __
的确切行为,但您可以非常接近。您会知道要覆盖哪些属性,因此类似以下内容应该可以工作。
如果没有一个简单的例子来说明如何使用它,就很难提出更有意义的建议。也就是说,问题应该始终显示代码。
var obj = {
b: 1,
c: 2
};
var proxy = new Proxy(obj, {
get: function(target, property, receiver) {
if (property == 'addBC') {
return function() {
return target.b + target.c;
}
}
return target[property];
}
})
console.log('proxy.addBC() => ' , proxy.addBC()); // 3
console.log(proxy.b); // 1
console.log(proxy.noexist); // undefined
try {
console.log(proxy.noexist());
} catch(e) {
console.log('error running no exist function')
}
关于javascript - 未找到通过代理模拟的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36283988/