2012-05-11 20 views
0

私はwindow.confirmのカスタム関数を実装したいので、大量のレガシーコードを書き直す必要はありませんが、何かがうまくいかない場合、または何らかの問題に応じて元の関数にフォールバックすることができます論理。JavaScriptでグローバル関数をオーバーライドする方法はありますが、元の関数への参照は保持していますか?

迅速なスタブコードは、単なる一例(おそらく、このようにそれを行うことはありませんが、ちょうどアイデアのための)ために:

window.confirm = function(message, successCallback){ 
    var ok = site.UI.confirmDialog(message); 
    if (ok && typeof(successCallback) == 'function'){ 
     successCallback(); 
    } else { 
    // maybe call original browser confirm? 
    // window.confirmOriginal...? 
    } 
} 

ここで問題は、私は「の場合、元の関数を取得する方法であり、それを上書きしていますか?プロトタイプのどこかに存在するのでしょうか、あるいはこれを間違った方法で見ていますか?

ありがとうございました。

+0

私は***強く***アドバイスは、あなたは '*異なっ*' confirm'(コールバックを行うのではなく、ブロッキング)からの振る舞い何かでconfirm'を上書きしないでしょう。別の名前の関数を作成します。 –

+0

'inheritance'タグを再:これは継承とは関係ありません。私はタグを削除しました。 –

+0

参照が明示的に格納されていなくても、元の関数がどこかに存在するかどうかは本当に興味がありました.JSの仕組みはたくさんありますが、微妙なことはまだ探っています:) – dmp

答えて

3

Here's a demo

var origConfirm = window.confirm; //store for future use 

​window.confirm = function(msg){ //override 
    alert(msg); 
} 

window.confirm('override!');  //should now be an alert 
origConfirm('old confirm');  //the old confirm 
+0

orig関数は上書きすると新しい関数を受け取りませんか? – dmp

+0

@ダンピング:いいえ、そうではありません。同じ理由で、 'a = new Date(); b = a; a = new Date(); '、' b'は、作成された最初の日付を指します。関数はJavaScriptの単なるオブジェクトです。 –

+0

うん、ちょっと - ちょうど試して、それは動作します。しかし、私が理解したことは、あなたが= {key: 'thing'}; a = b;あなたが変更したものはbにも反映されますか?私はその機能がオブジェクトであることを知っています。 – dmp

関連する問題