jQuery はクラスのようなモデルで動作するように設計されていないことは知っていますが、基本クラスを拡張できるようにすることで、私のニーズに完全に適合することができます。
私は次のことをすることから始めました:
jQuery.myBase = {
foo: 'bar',
bar: function() { ... }
}
jQuery.fn.myPlugin = function() {
$.extend( this, jQuery.myBase, {
oof: 'rab',
rab: function() { ... }
}
}
すべて正常に動作し、. 経由で基本メソッドとプロパティにアクセスできますthis
。それは、イベント ターゲットを に適用する jQuery イベント ハンドラ (など) のようなものを追加しようとするまでですthis
。
したがって、次のようになります。
jQuery.myBase = {
bar: function() { ... }
}
jQuery.fn.myPlugin = function() {
jQuery.extend( this, jQuery.myBase, {
init: function() {
jQuery('#someEl').click( this.onClick );
},
onClick: function(e) {
// this now references the element I bound the event to (<div id="someEl" />)
// so the following doesn't work
this.bar();
}
}
}
jQuery で動作するクラスの作成と継承 ( John Resig のものやDUIなど) のいくつかを見つけましたが、同じ問題が発生します。
this
では、これらの状況でオリジナルに到達するにはどうすればよいでしょうか?
更新:イベント ハンドラー (など) は、jQuery.myBase
またはプラグイン自体のいずれかにある可能性があります。