这是官方的jquery 插件指南。
关于包装函数的部分可以在这里找到(“插件方法”)(这个例子是一个可能的工具提示插件):
(function( $ ){
var methods = {
init : function(options) { ... },
show : function() { ... },
hide : function() { ... },
update : function(content) { ... }
};
$.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);
[更新]解释methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ))
指南中的行:
如果您$(selector).tooltip('update', 'hello')
从您的 javascript 代码中调用,您希望最终调用该update
方法,'hello'
作为content
参数传递,并在调用期间this
设置$(selector)
为。
这就是这条线所关心的:
- 如果
method == 'update'
,methods[method]
是update
方法,
arguments
将等于['update', 'hello']
,您必须删除第一个元素才能获取要传递给方法的参数;这正是这样Array.prototype.slice.call(arguments, 1)
做的,
myFunc.apply(obj, argsArray)
调用函数,作为参数myFunc
传递,并在调用期间设置为。argsArray
this
obj
因此,在您的方法中,您可以调用this.each(...)
以迭代所有选择器的项目,例如:
update: function(content) {
this.each(function(){ $(this).data('tooltip.content', content); });
return this;
}