私は JavaScript プラグインについてさらに学習を進めており、興味のあるプラグインを見つけました。私は足を汚して、このことをどのように変更できるか見てみたい.
(function( $ ){
var methods = {
init : function( options ) {
return this.each(function(){
var $this = $(this),
data = $this.data('tooltip'),
tooltip = $('<div />', {
text : $this.attr('title')
});
// If the plugin hasn't been initialized yet
if ( ! data ) {
console.log('still working..' );
/*
Do more setup stuff here
*/
$(this).data('tooltip', {
target : $this,
tooltip : tooltip
});
}
});
},
show : function( ) {
console.log('this is the show');
},
hide : function( ) {
// GOOD
},
update : function( content ) {
console.log('this is the update');
// !!!
}
};
$.fn.tooltip = function( method ) {
// Method calling logic
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );
}
};
})( jQuery );
わかりました 4 つの質問があります... 1.このプラグインをどのように初期化しますか? ランダムな div 要素 $('#mtest').tooltip(); を実行しようとすると、コンソール ログに「まだ動作中..」と表示され続けます。
2 init: はプライベートな var メソッドの中にあります。つまり、このプラグインの外から init: にアクセスすることはできませんか? 右?オプションを返しているように見えるので、初期化ロジックをどこに配置しますか...?
3. コードのこの部分について混乱しています...
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );
}
私はそれがすべてのメソッドを返すことを知っていますが...
3a. なぜ書き込みメソッド [メソッド] // は [メソッド] が配列のように見えるのか、配列が表示されないため、混乱しているように見えます。これはメソッドの集まりです...
3b. 他に何をチェックしていますか?または、なぜエラーが発生するのでしょうか?
このプラグインを完全に理解するのに役立つアドバイスをありがとう!