2011-08-03 11 views
1

これはオブジェクト指向プログラミングの一般的な作業ですが、JavaScriptプログラムの動作を変更したい場合は、既存の関数をオーバーライドすることもできます。私はWindowsがフックを書いて連鎖することを紹介したことを覚えています。だから私が望むものは、私は最後に関数initFieldsを呼び出すいくつかのonloadフックを呼び出すWebページを持っています。私は以前の実装を維持しながら、この関数を再定義したい。私は単にJS関数のチェーンを再定義する方法

function initFields() { 
    // do some stuff ... 
    // I do not know how to call super.initFields() here 
} 

としての私のJS関数を定義する場合は、

initFields.prototype = function() { 
    // do some stuff ... 
    // but still have no idea how to call the original one 
}; 

を書くことができますように私は何かを読んで誰かが助けることができますか?

+0

私たちの本来の機能は、あなたはまた、変数に既存の機能をバックアップすることができ – Cameron

答えて

6

1つのオプションは、あなたがunderscore.jsライブラリからラップ()関数を試みることができる

var initFieldsInitial = initFields; 
function initFields() { 
    // your stuff 
    initFieldsInitial.apply(this, arguments); 
} 
+0

など、あなたがどのように使われるか、それがどのように使われるか、宣言されている方法の例を表示します。 'var oldFunc = obj.func; obj.func =新しい関数(){...; oldFunc.apply(これは引数); }; ' – OverZealous

+0

initFieldsInitialはコンテキスト内で定義されたinitFieldsのアドレスを取得しているようですので、私はループしていますが、私はその考えが好きです。 –

2

です。

http://documentcloud.github.com/underscore/#wrap

var initFields = function() { 
    // do something 
    console.log('initFields'); 
} 

initFields = _.wrap(initFields, function(initial) { 
    // do some stuff 
    console.log('wrapper'); 
    initial(); 
}); 

$(document).ready(function() { 
    initFields(); 
}); 
関連する問題