扩展原型方法

时间:2013-02-01 00:00:51

标签: javascript prototype

现在我有一个原型:

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中的内容。谢谢!

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)

答案 1 :(得分:1)

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