我在v8中模拟noSuchMethod时遇到问题。我在命令行上正确激活了和声代理(我没有使用Proxy()对象得到错误,并且能够使用某些代理功能),但是我发现的所有示例都不适用于noSuchMethod。

var NoSuchMethodTrap = Proxy.create({
  // FIXME: don't know why I need to provide this method,
  // JS complains if getPropertyDescriptor is left out, or returns undefined
  // Apparently, this method is called twice: once for '_noSuchMethod_' and once for 'foo'
  getPropertyDescriptor: function(n){ return {} },
  get: function(rcvr, name) {
    if (name === '__noSuchMethod__') {
      throw new Error("receiver does not implement __noSuchMethod__ hook");
    } else {
      return function() {
        var args = Array.prototype.slice.call(arguments);
        return this.__noSuchMethod__(name, args);
      }
    }
  }
});

function MyObject() {};
MyObject.prototype = Object.create(NoSuchMethodTrap);
MyObject.prototype.__noSuchMethod__ = function(methName, args) {
  return 'Hello, '+methName;
};

我包括了我正在尝试的代码片段,但这一点都不值钱,因为无论从哪里获取代码,都是相同的情况。我已经用谷歌搜索了一个星期。所以这是一个问题:v8根本没有实现吗?如果是这样,我想念什么?

最佳答案

只是为了结束循环:Proxy规范已经发生了很大变化,并且V8现在实现了全新的规范。不再需要标记,并且不应缺少任何功能。

关于javascript - v8中的和谐代理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14046561/

10-16 13:08