2013-02-01 107 views
0

現在我有一個原型,如:擴展原型方法

function A() {} 

A.prototype.run = function() { 
    console.log('run 1'); 
}; 

鑑於其中A是(在沒有源控制),我不能改變任何東西。我想擴展方法run。不僅是日誌run 1,還有日誌run 2。我嘗試了幾種不同的方法,但它不起作用。

A.prototype.run = function() { 
    this.run.call(this); 
    console.log('run 2'); 
} 

或任何

A.prototype.run = function() { 
    arguments.callee.call(this); 
    console.log('run 2'); 
} 

有一個解決方案?我寧願不要複製方法run中的內容。謝謝!

回答

1
A.prototype._run = A.prototype.run; 
A.prototype.run = function() { 
    this._run.call(this); 
    console.log('run 2'); 
} 
+0

謝謝!快捷方便! –

1

您可以覆蓋run方法,並保存對其的引用;

(function (orig) { 

    A.prototype.run = function() { 
     orig.apply(this, arguments); 

     console.log('run 2'); 
    } 

}(A.prototype.run)); 

這類似於你的第一次嘗試,但保留的run的第一個值,這樣就可以有效地做到this.run.call(this)爲你嘗試。