2012-01-27 91 views
0

我對Javascript中的「call」函數有所懷疑。我有這樣的jQuery插件:對jQuery插件的回調函數

(function($) { 
    var methods = { 
     method1 : function(settings, callback) { 
      // do stuff 
       if($.isFunction(callback)){ 
        callback.call(this, $(list)); 
       } 
     }, 

     method2 : function(settings, callback) { 
      // do stuff 
       if($.isFunction(callback)){ 
        callback.call(this, $(list)); 
       } 
     }, 

     method3 : function(settings, callback) { 
      // do stuff 
       if($.isFunction(callback)){ 
        callback.call(this, $(list)); 
       } 
     }, 


}; 

$.fn.jPlugin = function(method) { 
    if (methods[method]) { 
     return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 
    } 

    else if (typeof method === 'object') { 
     $.error('Expected two (2) parameters: parameter 1 must be the method name to call. Parameter 2 must be an object containing the settings for this method.'); 
    } 

    else { 
     $.error('Method ' + method + ' does not exist'); 
    } 
}; 

而且我有點困惑該行的jQuery插件文檔中:

return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 

插件按預期工作編號回調傳遞。但是,如果我像這樣調用插件,我應該如何將回調傳遞給正確的方法?

$('#my-div').jPlugin('method1', settings); 

如果回調函數的部分設置對象,或者我會適應的插件能接受嗎?

$('#my-div').jPlugin('method1', settings, callback); 

謝謝各位!

+0

'$( '#我-DIV')jPlugin( '方法1',設置回調);'將與您當前的插件代碼工作。你到底有什麼問題? – 2012-01-27 18:02:25

+0

我只是完全不瞭解「通話」這一段。我認爲(參數1)引用了$('#my-div')的第二個參數。jPlugin('method1',settings);,... so「settings」。我不知道是否應該在其他地方添加回調。 – luso 2012-01-27 18:12:01

+0

我猜,「參數」本身是指調用的所有參數,所以設置和回調,就是這樣嗎? – luso 2012-01-27 18:13:01

回答

0

搶答@Felix克林評論