1

次のような関数があります。

function outer() {
    function inner_1() {
        alert('inner_1');
    }

    function inner_2() {
        alert('inner_2');
    }

    function inner_3() {
        alert('inner_3');
    }

    inner_1();
    inner_2();
    inner_3();
}

を呼び出す必要がありますが、別の関数outer()に置き換えたいです。inner_1()

私はこれを試しました:

new_outer = outer;

new_outer.inner_1 = function() {
    alert('my new inner function');
};

このように新しく再定義されたものを呼び出そうとするとinner_1:

new_outer.inner_1();

期待どおりに動作します (「新しい内部関数」が警告されます)。

しかし、外側の関数を呼び出そうとすると:

new_outer();

の古いバージョンinner_1が呼び出されます。

inner_1と callを再定義したいouter。どうすればこれを達成できますか?

4

1 に答える 1

0

これは本当に悪い考えのように思えるので、コードを投稿するつもりはありません。ただし、「教育目的のみ」の答えを追求している場合は、関数をその範囲外から簡単に再定義することはできませんが(例のように)、関数に添付された関数を再定義することを妨げるものは何もないことを示唆します関数オブジェクト。

ただし、解決しようとしている問題が何であれ、より良い解決策があると思います。

于 2013-03-04T22:25:26.393 に答える