2013-05-29 90 views
0

麻煩,我遇到一些麻煩一些基本的javascript一些基本的JavaScript

function tank(){ 
    this.width = 50; 
    this.length = 70; 
} 

function Person(job) { 
    this.job = job; 
    this.married = true; 
} 
var tank1 = tank(); 
console.log(tank1.length); //returns: Uncaught TypeError: Cannot read property 'length' of undefined 

var gabby = new Person("student"); 
console.log(gabby.married); //returns: true 

第一的console.log不工作,但第二的console.log作品。我是一個JavaScript初學者,並且對於長度屬性爲什麼沒有定義我不知所措。任何幫助?

回答

10

你錯過了new關鍵字:

var tank1 = new tank(); 
1

當您執行罐(),該函數的執行上下文是window對象。你正在做的是在窗口對象中添加「width」和「length」字段,如果在調用tank()之後執行window.lengthwindow.width,則可以看到該字段。您應該看到值70和50.由於tank函數沒有返回值,因此語句var tank1 = tank();tank1有效設置爲undefined,因此會出現錯誤。

在第二份聲明,您呼叫的Person構造,所以在時間function Person(job) {...}執行,this是你創建的Person對象的引用。 new聲明執行以下操作:

  1. 創建Person對象。
  2. 調用構造函數「function Person(...)」,將this設置爲對其剛剛創建的對象的引用。
  3. 函數返回後,將新的Person對象返回給調用方。

有關執行上下文的更多信息,請參閱here