javascript - 未找到通过代理模拟的方法

标签 javascript

以前,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/

相关文章:

javascript - 使用循环(JavaScript)从一维数组创建二维数组

javascript - 无法加载资源: the server responded with a status of 404 (Not Found) while loading image in img element

javascript - 三个js如何手动添加三 Angular 形到BufferGeometry

javascript - 重置 EditorGridPanel 列值

javascript - 如何将 jquery tabledit 按钮添加到表的新行

javascript - 检测 Google 折线图的缩放事件?

javascript - 更新 li 元素的属性 data-id Nestable 不更新

javascript - 我希望我的 View 获取属性的值

javascript - 如何在 Chrome 中跟踪 WebRTC VideoStream 的分辨率/宽高比?

JavaScript - 根据事件在同一区域显示不同的字段集