JavaScript 对象装饰器
JavaScript Object Decorator
我有一个 JavaScript 对象,它有多个方法:
var actualObject = {
foo: function(){},
bar: function(){},
…
}
然而,我希望人们使用的实际对象是 proxy
。它应该将所有调用转发给 actualObject
。最简单的方法就是将 actualObject
分配给 proxy
.
proxy = actualObject;
但是,对于某些方法,我希望代理具有额外的功能。
proxy.bar = function(arguments) {
console.log('do something beforehand');
actualObject.bar(arguments);
console.log('do something afterward');
}
问题是,如果 proxy
和 actualObject
相同,这个重写的 bar 方法将导致递归。因此,我的问题是:什么是最 "idiomatic" 克隆 JavaScript 对象但以允许从覆盖方法中调用原始方法的方式覆盖某些方法的方法?
将 proxy
原型设为 actualObject
然后在 proxy
中定义函数:
var proxy = Object.create(actualObject);
proxy.bar = function(arguments) {
console.log('do something beforehand');
actualObject.bar(arguments);
console.log('do something afterward');
}
我有一个 JavaScript 对象,它有多个方法:
var actualObject = {
foo: function(){},
bar: function(){},
…
}
然而,我希望人们使用的实际对象是 proxy
。它应该将所有调用转发给 actualObject
。最简单的方法就是将 actualObject
分配给 proxy
.
proxy = actualObject;
但是,对于某些方法,我希望代理具有额外的功能。
proxy.bar = function(arguments) {
console.log('do something beforehand');
actualObject.bar(arguments);
console.log('do something afterward');
}
问题是,如果 proxy
和 actualObject
相同,这个重写的 bar 方法将导致递归。因此,我的问题是:什么是最 "idiomatic" 克隆 JavaScript 对象但以允许从覆盖方法中调用原始方法的方式覆盖某些方法的方法?
将 proxy
原型设为 actualObject
然后在 proxy
中定义函数:
var proxy = Object.create(actualObject);
proxy.bar = function(arguments) {
console.log('do something beforehand');
actualObject.bar(arguments);
console.log('do something afterward');
}