2016-01-02 85 views
0

我有了多種方法JavaScript對象: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是相同的,此重寫棒法將導致遞歸。因此,我的問題是:克隆JavaScript對象的最「習慣」方式是什麼,但是以某種方式覆蓋某些方法,從而允許從最重要的方法中調用原始方法?

+1

你可以有'actualObject'爲原型,爲你的'proxy'。然後,'proxy'可以通過在'proxy'上定義它來覆蓋原型的任何屬性。 – MinusFour

+0

完美的作品!你應該發佈一個答案,以便我可以接受它。 – arik

回答

2

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

這就是原型應該是..upvote – Nishant