お疲れ様です。
さっそく表記の件。
ページ間で共通で読み込み、各々で違う処理をさせたいってなったので、
(例えばウィンドウリサイズ時に、起動させるメソッドは一緒だけど、ページごとに追加処理をさせたい、とか)
いろいろ探してみた。
が、
うまい方法が見つからなかった・・・。
ひとまず思いついた方法が下記。
//ラッパークラスを定義
var $wrapperObjClass = function(c){
//コンストラクタ起動時に、初期化関数を実行するようにしている。
if(c){
this.init(c, true);
}
};
//初期化メソッドと処理メソッドを定義
$wrapperObjClass.prototype = {
init: function(c, f){
var orignTestFunc = this.testFunc;
this.testFunc = function(f){
orignTestFunc(f);
if (c) {
try {
c(f);
} catch(e) {
console.log(e);
}
}
};
},
testFunc: function(f){
console.log('そうだよ');
}
};
//インスタンス格納(コンストラクタ起動)
var $testFuncInstanse = new $wrapperObjClass(function(){
console.log('アホだよ');
});
$testFuncInstanse.testFunc(); //出力:そうだよアホだよ
クラスメソッド(コンストラクタで起動している初期化メソッドinit)定義時に、
11行目で、拡張したい関数のもともとのメソッドを、変数に格納して逃がし、
次の行からもともとのメソッドを定義し直して、
その中で、元メソッドと、追加処理を実行している。
下記エントリを参考にしている。
(やってることはほとんど一緒)
●javascript:既存の関数を拡張する(処理を追加する) - Qiita
なんかもっとスマートな方法ないんかね・・・。
jQueryだと、onとかで、処理を追加なんてやってるけど、
jQueryの中身を研究するなんて、めんどくさくてやってられんし、
探してもやっぱこんな方法しか思いつかなかった。
これでいくしかないか・・・。
誰かもっとスマートな方法あったら教えてほしい。。。
コメントする