2013-10-01 27 views
1

我想學習jquery插件,在這個過程中我想先了解一些jquery插件。我已經閱讀了幾個插件,並在插件的開始部分遇到了幾個常見的代碼。是init.apply和方法[方法] .apply JavaScript行默認

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.jModalbox'); 
} 

任何機構可以告訴我,

  1. 是像,我們要按照這個建設我已經觀察到的插件
  2. 當控制檯將不以

    返回方法[方法] .apply(this,Array.prototype.slice.call(arguments,1));

    那麼爲什麼我們需要if部分。

  3. 爲什麼調用該方法適用於INIT,我的意思是 爲什麼調用,如:methods.init.apply(this, arguments); 爲什麼不喜歡這樣的:methods.init(arguments);
  4. 我所遇到的閱讀apply(),但並不清楚。請任何機構解釋

回答

3

這很難解釋,但我會盡我所能。

如你所知apply方法帶2個參數。第一,context of function和第二,array of function parameters

context的是喜歡對象的自我們可能稱爲function scope的參考。它的功能是指this

您顯示的這段代碼必須使用apply方法,因爲他們想要設置被調用函數的context。我真的確定使用被調用函數this來做些什麼。

如果您直接調用函數,它將不會引用您想要的this。那爲什麼他們必須使用apply而不是直接調用。

希望這會有所幫助!

欲瞭解更多信息,您可以閱讀this