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

Javascript 传递setter时,如何使用=赋值?,javascript,getter-setter,defineproperty,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

我正在一个遗留库函数上编写一个兼容性层,其内部签名如下-

function legacyLibraryFunction(context) {
  context.foo.bar = "data"
  return context
}
但是,新系统不建议将自定义属性直接分配给
context
,而是建议使用
context.set()
方法

如何将
context
从新系统传递到旧系统,以使
context.foo=“data”
最终调用
context.set('foo',data)

我猜我可以使用Object.defineProperty来实现这一点,但我真的不明白怎么做。

使用setter: 您可以为此使用setter:

var wrappedContext = {
    set foo(val) {
        context.set('foo',val);
    }
}
注意:我假设
context.foo
而不是
context.foo.bar
,因为问题的第二部分与示例代码不太匹配

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

legacyLibraryFunction(wrappedContext);
使用代理: 由于您使用的是node 6.6,因此还可以使用代理:

var wrappedContext = new Proxy(context,{
  set: function(obj, prop, value) {
    obj.set(prop,value);
  }
});
使用setter: 您可以为此使用setter:

var wrappedContext = {
    set foo(val) {
        context.set('foo',val);
    }
}
注意:我假设
context.foo
而不是
context.foo.bar
,因为问题的第二部分与示例代码不太匹配

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

legacyLibraryFunction(wrappedContext);
使用代理: 由于您使用的是node 6.6,因此还可以使用代理:

var wrappedContext = new Proxy(context,{
  set: function(obj, prop, value) {
    obj.set(prop,value);
  }
});

您使用的是什么版本的javascript?这是针对特定的setter还是可能用于上下文对象的任何setter?后者需要代理。@parth这个特殊的代理。我只需要在遗留函数的签名中处理一个属性您使用的是哪个版本的javascript?这是针对特定的setter还是可能用于上下文对象的任何setter?后者需要代理。@parth这个特殊的代理。我只需要处理遗留函数签名中的一个属性