5

ここにブックマークレットをいくつか書いていますが、組み込みの JavaScript 関数に関連する質問があります。

組み込みのプロンプト機能を置き換えたいとしましょう(必ずしもブックマークレットではありません)。それは簡単に思えますが、この置換内から組み込みのプロンプト関数を呼び出す方法はありますか?

prompt = function(message){
    var tmp = prompt(message);
    hook(tmp);
    return tmp;
}

スコーピングを正しく行うことができませんでした。この例は、無限再帰をもたらします。

また、置き換えられた組み込みの JavaScript 関数のデフォルトの動作を復元する方法もあります (余分な参照に依存することなく)。

4

1 に答える 1

6
(function () {
    var old_prompt = prompt;
    prompt = function (msg) {
        var tmp = old_prompt(msg);
        hook(tmp);
        return tmp;
    };
    prompt.restore = function () { prompt = old_prompt; }
    // analogous for other functions you want to replace
})();

(自己実行)関数でラップすることでold_prompt、外部に漏れないようにします。ただし、何かを公開する必要があります。便宜上、復元を行う機能を提供することにしました。おそらく、将来の保証とカプセル化とも言えます。高階関数が他人のスコープをいじらない限り…

また、いいえ、たとえその値がたまたま組み込みであったとしても、それを参照せずに変数の以前の値 (古い値) を復元することは (私が推測するに) 不可能です。たとえそれが可能だったとしても、それはかなりあいまいなトリックになるでしょう - この方法はうまくいくので、そのままにしておきましょう.

(クレジットはfunc.restoreMartijnに送られます)

于 2011-02-18T18:43:14.383 に答える