2013-02-01 109 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)为你尝试。