2012-03-22 100 views
0
var boxArea = function() { 
    this.width=2; 
}; 

alert(boxArea.width); 

美好的一天。爲什麼這會返回一個未定義的值?使用函數創建Javascript對象

+2

閱讀了關於JavaScript的[模塊模式](http://www.adequatelygood.com/2010/3/JavaScript的模塊的模式的縱深)。它解釋了你的width變量是如何對boxArea對象進行私有的。 – Straseus 2012-03-22 23:33:50

+0

將使用「=新功能」 – qux 2012-03-22 23:36:01

回答

3

因爲您使用該語法創建了一個函數。你必須在函數()前添加「new」關鍵字,使它與一個類的等價。

的jsfiddle演示:http://jsfiddle.net/dfUQu/

var boxArea = new function() { 
    this.width=2; 
}; 

alert(boxArea.width);​ 
+0

好,所以新的關鍵字使一個新的對象。但功能是不是也是對象? – DevX 2012-03-22 23:55:26

+1

它們在語法上相似,但爲不同目的而設計。一個函數只是爲了執行一些工作而被調用。一旦它退出內部定義的任何東西,現在已經超出範圍並被丟棄。一個類意味着*實例化*和*重用*。 * new *關鍵字創建了任何用戶定義的實例*(或者構建對象,例如Date())。 – Timeout 2012-03-23 00:06:44

+0

我可以說var person = {};與var person = new object()相同; – DevX 2012-03-23 00:15:30

0

經典的方式來創建一個JavaScript構造使用聲明的函數:

function BoxArea(width) { 
    this.width = width; 
} 

按照慣例,構造具有開頭大寫字母的名字。然後創建一個實例:

var ba = new BoxArea(2); 

alert(ba.width); // 2 

對於這樣一個簡單的對象,你可以只是做:

var ba = {width: 2};