2011-06-08 50 views
1

我試圖理解ColorBox背後的Javascript/jQuery。某些形式的語法在Google上搜索有點難,因爲它們有點冗長。我無法理解以下行:幫助理解Javascript異常函數聲明的語法

publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) { 

所以我假設了一個名爲正在創建publicMethod新的功能,但是我們如何,但我真的不明白任何超出第一等號(「=」) 。

普通函數的聲明是這樣的:

function publicMethod(options, callback) { 

所以,如果有人可以幫助我理解語法我​​將不勝感激。

回答

1

在:

$.fn[colorbox] 
  • $是無助地非描述性的變量名。它包含一個對象。
  • $.fn訪問該對象的fn屬性。
  • fn[colorbox]訪問其存儲在colorbox

但是的右手側和=一個該字符串匹配名字首先定義該對象的屬性,所以它該值分配給publicMethod之前它將值的$[colorbox]$.fn[colorbox]

...之前,它分配(到那裏)一個函數。

function() {}定義了一個匿名函數,並將其左(所以它被保存在什麼是對的=另一側)

0

這個function publicMethod(options, callback) {}var publicMethod = function(){options, callback}差不多但不完全相同。在第一種情況下,您創建名爲publicMethod的函數,並在第二種情況下創建匿名函數並將其分配給publicMethod變量。其他分配只是保存這個功能作爲API方法的進一步使用。

1

在JavaScript中,函數是在同一水平上的其他對象 - 你可以將它們分配給變量,並將它們作爲參數傳遞。

通常情況下,你會在這樣一個函數聲明:

function SomeFunc(arg1, arg2) { /* etc etc */ } 

的equivalient方式將是:

var SomeFunc = function(arg1, arg2) { /* etc, etc */ } 

...因爲,如上所述,函數本身價值可能被分配或通過。許多庫將接受函數作爲自己函數的參數,在適合它們的時間運行傳遞的函數(或將它們傳遞到其他地方,任何其他變量)。通常這是回調。當傳遞函數作爲參數時,並不需要給他們自己的名字,因此以下工作:

SomeLibrary.doSomethingThenCallback(function(arg1, arg2) { 
    // the doSomethingThenCallback function will decide when, if ever, 
    // to run this, or pass it on somewhere else, or whatever else would 
    // be done with any other argument value. 
});