0
我正在創作插件,所以我轉向了jQuery文檔,它談論的不是混亂$ .fn對象,以及沒有一個插件應該聲稱超過$ .fn命名空間...創作插件jQuery文檔
(function($){
var methods = {
init : function(options) {
// THIS
},
show : function() {
// IS
},
hide : function() {
// GOOD
},
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);
// calls the init method
$('div').tooltip();
// calls the init method
$('div').tooltip({
foo : 'bar'
});
我明白了一切,直到:
return methods[ method ].apply(this, Array.prototype.slice.call(arguments, 1));
一部分。
我改變了一點簡單:
$.fn.tooltip = function(method)
{
if(myFunc[method])
{
return myFunc[method].apply();
}
}
和它的作品就好了... ...可有人請向我解釋不清楚發生了什麼事情在那裏,爲什麼我的似乎只是正常工作?
編輯:順便說一句,我知道我沒有完全繼續if/else結構,那是因爲我純粹專注於我提到的行而不是if結構的其餘部分。
你的方式是假設你的「方法」都不需要額外的參數。如果他們需要額外的參數,則需要添加它們。 YOu甚至可以進一步將其簡化爲'return myFunc [method]()' – 2013-04-03 19:40:45
你能再詳細說明嗎?也許給了我如何添加額外參數的例子? 真的,我只是想了解jQuery的文檔示例發生了什麼。 – 2013-04-03 20:15:31
例如,如果你的插件有一個「跳躍」方法,你會想給它一個「高度」參數。 '$(EL).myPlugin( 「跳」, 「3英尺」)'。如果您從原始代碼中刪除所有額外的東西,您將無法將「3ft」部分傳遞給該方法。 – 2013-04-03 20:18:15