未通过代理找到方法模拟

时间:2016-03-29 12:14:53

标签: javascript

过去,JS使用Object.prototype .__ noSuchMethod __来处理不存在的方法,因此您可以根据OOP使用方法作为消息。

不幸的是,它已被弃用了。替换是代理对象。但是只对函数而不是对象应用处理程序catch调用,因此你不能捕获不存在的方法。

你可以使用get handler,但是你不知道你是否应该返回一些函数,或者什么都没有,只是做一些事情。您还没有名称访问的上下文。

那么,任何想法如何在没有明确检查的情况下处理不存在的方法?

1 个答案:

答案 0 :(得分:1)

您无法获得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')
}