如何在传递setter时使用=赋值?

时间:2016-09-20 06:17:20

标签: javascript getter-setter defineproperty

我在遗留库函数上写了一个兼容层,其内部签名看起来像 -

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

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

如何将context从新系统传递到旧系统,以便context.foo="data"最终称为context.set('foo', data)

我猜我可以使用Object.defineProperty,但我真的不明白。

1 个答案:

答案 0 :(得分:0)

使用setter:

你可以使用一个setter:

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);
  }
});