我正在学习有关 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。为什么 write methods[method]// 看起来 [method] 是一个数组,这让我很困惑,因为我没有看到一个数组,它是一堆方法......
3b。else 检查的是什么?或者为什么会发生错误?
感谢您提供有关帮助我完全理解此插件的任何建议!