2013-05-29 67 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