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。谢谢!

4

2 回答 2

1

您可以覆盖该run方法,并保存对它的引用;

(function (orig) {

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

        console.log('run 2');
    }

}(A.prototype.run));

这类似于您的第一次尝试,但保留 的第一个值run,因此您可以有效地this.run.call(this)按照您的尝试进行操作。

于 2013-02-01T00:03:46.583 回答
1
A.prototype._run = A.prototype.run;
A.prototype.run = function () {
    this._run.call(this);
    console.log('run 2');
}
于 2013-02-01T00:03:47.620 回答