1

我正在一个遗留库函数上编写一个兼容层,其内部签名看起来像 -</p>

function legacyLibraryFunction(context) {
  context.foo.bar = "data"
  return context
}

但是,新系统不建议直接分配自定义属性context,而是建议使用该context.set()方法。

我如何context从新系统传递到旧系统,以便context.foo="data"最终被调用context.set('foo', data)

我猜我可以为此使用 Object.defineProperty ,但我不太明白如何。

4

1 回答 1

0

使用二传手:

您可以为此使用设置器:

var wrappedContext = {
    set foo(val) {
        context.set('foo',val);
    }
}

注意:我假设context.foo不是context.foo.bar因为您问题的第二部分与示例代码不完全匹配。

这将创建一个对象 ( wrappedContext),该对象 ( ) 将具有一个foo属性,context.set()当您为其赋值时将调用该属性。那么你可以这样做:

legacyLibraryFunction(wrappedContext);

使用代理:

由于您使用的是节点 6.6,因此您还可以使用代理:

var wrappedContext = new Proxy(context,{
  set: function(obj, prop, value) {
    obj.set(prop,value);
  }
});
于 2016-09-20T06:36:44.663 回答