我在遗留库函数上写了一个兼容层,其内部签名看起来像 -
function legacyLibraryFunction(context) {
context.foo.bar = "data"
return context
}
但是,新系统不建议直接将自定义属性分配给context
,而是建议使用context.set()
方法。
如何将context
从新系统传递到旧系统,以便context.foo="data"
最终称为context.set('foo', data)
?
我猜我可以使用Object.defineProperty,但我真的不明白。
答案 0 :(得分:0)
你可以使用一个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);
}
});