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');
}

问题是,如果 proxyactualObject 相同,这个重写的 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');
}