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这个特殊的代理。我只需要处理遗留函数签名中的一个属性