2016-05-17 110 views
-4

請幫我,我有錯誤「TypeError:sally is undefined」; 我不明白爲什麼。TypeError:sally is undefined

function Person(name,age) { 
this.name = name; 
this.age = age; 
this.species = "Homo Sapiens"; 
}; 

var sally = Person("Sally Bowles", 39); 
var holden = Person("Holden Bowles", 16); 

console.log("sally's species is " + sally.species + " and she is " + 
sally.age); 
console.log("holden's species is " + holden.species + " and he is " + 
holden.age); 
+4

嘗試'莎莉=新的Person( 「薩莉·鮑爾斯」,39);' 我想你錯過了 '新' 的關鍵字。 –

+1

*我不明白爲什麼*任何JavaScript初學者教程會幫助你理解 –

回答

2

要創建新的對象,你必須調用構造函數操作

objectName = new objectType(param1 [,param2] ...[,paramN]) 

MDN new operator有關新運營商的更多信息。

在你當前實現通話:

var sally = Person("Sally Bowles", 39); 

this內執行的人的構造是窗口對象(應當指出的是,this將其定義背景功能的對象,我認爲它的window對象)。

所以,你只需添加操作之前調用構造函數傳遞所需的環境下和構造函數中得到有效的this

var sally = new Person("Sally Bowles", 39); 
+0

要迂迴地看着那個代碼,你不知道'this'會是什麼;它可能是'window'對象,但它取決於它是否在瀏覽器中以及在哪個上下文中執行。 – bfontaine

+0

@bfontaine感謝您注意那一刻。 –

+0

@ zok1995歡迎您:) –

3

使用new操作:

var sally = new Person("Sally Bowles", 39); 
var holden = new Person("Holden Bowles", 16); 
-1
var sally = new Person("Sally Bowles", 39); 
var holden = new Person("Holden Bowles", 16); 
0

如果你不new,前綴Person(…)函數被調用,其返回值被分配到sally。在你的情況下,該函數什麼也沒有返回(undefined),所以sallyholden都設置爲undefined

你想要的是創建一個對象與new關鍵字:

var sally = new Person("Sally Bowles", 39);