0

今、私は次のようなプロトタイプを持っています:

function A() {}

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

Aがどこにあるかを変更できないことを考えると(ソースを制御できません)。メソッドを拡張したいと思いrunます。ログだけでなく、ログrun 1run 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 に答える