1. ホーム
  2. javascript

[解決済み] JavaScriptの関数を参照しながらオーバーライドする

2022-04-25 18:12:05

質問

ある関数があります。 a() をオーバーライドしたいのですが、元の a() がコンテキストに応じた順序で実行されます。例えば、ページを生成しているときに、次のように上書きしたいことがあります。

function a() {
    new_code();
    original_a();
}

と、時にはこんな風に。

function a() {
    original_a();
    other_new_code();
}

どうすれば、その original_a() をオーバーライドしている a() ? それは可能なのでしょうか?

この方法でオーバーライドするための代替案を提案しないでください、私はたくさん知っています。私はこの方法について具体的に尋ねているのです。

どのように解決するのですか?

次のような方法があります。

var a = (function() {
    var original_a = a;

    if (condition) {
        return function() {
            new_code();
            original_a();
        }
    } else {
        return function() {
            original_a();
            other_new_code();
        }
    }
})();

宣言する original_a は無名関数の内部で使用することで、グローバルな名前空間の混乱を防ぐことができます。

Nerdmasterがコメントで述べているように、必ず () を最後に追加してください。外側の関数を呼び出して、その中に 結果 (2つの内部関数のうちの1つ)を a に格納するのではなく、外側の関数自体を a .