2011-12-12 197 views
2

我已經打開了jQuery 1.7.1庫並想研究代碼,但是我發現函數以奇怪的方式聲明(對我來說)。例如:jQuery函數聲明說明

show: function() { 
     //some code here 
}, 

我學會了定義在這條路上功能:

function show() { 
    //some code here 
} 

有人能解釋我爲什麼顯示功能沒有(在大多數教程像互聯網上)寫上第二個方法是什麼?

+0

你在第一個例子中遺漏了一些代碼嗎?看起來像它是更大的東西的一部分... –

+3

該函數是一個函數表達式,它是在一個對象文本中分配的。 –

+0

@AbeMiessler你是對的,但函數內部的代碼在這裏並不重要,因爲我只是要求函數的語法解釋。 –

回答

6

這是因爲它在一個對象內。 Object Literals有這樣定義自己的屬性:

{ 
    name: value, 
    //OR 
    'name': value 
} 

其中value可以是幾乎任何諸如數字,字符串,功能,甚至另一個對象。在JavaScript中,您還可以聲明anonymous functions並將它們分配給一個變量。事實上,下面的聲明有同樣的效果:

//declares the myFunc1 function 
function myFunc1() {} 
//declares an anonymous function and assigns it to myFunc2 
var myFunc2 = function() {}; 

//you can now call either like so: 
myFunc1(); 
myFunc2(); 

因此,結合這兩個概念,如果我有一個對象,我想它的一個屬性是一個函數,我會做它像這樣:

var myObj = { 
    name: 'My Object', 
    init: function() { 
     return 'Initializing!'; 
    }, 
    version: 1.0 
}; 

alert(myObj.init()); 

然後,您將得到輸出:Initializing!。確保檢查出很好的文檔和教程Mozilla Developer Network,包括他們JavaScript Tutorial Series

希望這有助於!

5

寫它的第一種方法實質上是將一個函數設置爲一個對象的屬性。

例如:

// I can create a new empty object 
var myObject = {}; 

// or I can create a new object with a basic property 
var myObject = { 
     color: "blue" 
    }; 

// I can also create an object with methods (like jQuery) 
var myObject = { 
     color: "blue", 
     showColor: function(){ 
      alert(this.color); 
     } 
    }; 

// and you can use the object like this 
myObject.showColor(); // calls the showColor method and will alert "blue" 

這有助於jQuery的封裝,命名空間和組織代碼。

這裏有幾個不錯的寫起坐:

2

第一個聲明,即show: function,定義節目是現場在具有類型函數的對象中。第二個函數在當前範圍內聲明一個名爲show的函數(可能是全局函數?)

1

它們被描述爲一個js對象函數。在這種情況下:

var jQuery = { 
    show: function(){ 
     //some code here 
    } 
} 

因此,您可以像jQuery.show()那樣訪問它。

我想說乍得的答案是最準確的深入研究。你應該仔細研究它們,因爲它們可以徹底改變你以非常乾淨的方式寫js,而這種方式與其他圖書館衝突的可能性要小得多。