【问题标题】:How do I assign a value using = when a setter is passed?如何在传递 setter 时使用 = 赋值?
【发布时间】:2016-09-20 06:17:20
【问题描述】:

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

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

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

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

我猜我可以为此使用 Object.defineProperty,但我不太明白怎么做。

【问题讨论】:

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

标签: javascript getter-setter defineproperty


【解决方案1】:

使用设置器:

您可以为此使用 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);
  }
});

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多