我有一个具有多种方法的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方法将导致递归。因此,我的问题是:克隆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 - JavaScript对象装饰器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34570960/

10-13 00:17