一些基本的JavaScript的麻烦

时间:2013-05-29 03:43:29

标签: 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初学者,我不知道为什么长度属性是未定义的。有什么帮助吗?

2 个答案:

答案 0 :(得分:10)

您错过了new关键字:

var tank1 = new tank();

答案 1 :(得分:1)

执行tank()时,函数的执行上下文是window对象。您正在做的是向窗口对象添加“width”和“length”字段,如果在window.length调用后执行window.widthtank(),则可以看到此字段。您应该看到值70和50.由于tank函数未返回值,因此语句var tank1 = tank();有效地将tank1设置为undefined,因此您获得的错误

在第二个语句中,您正在调用Person构造函数,因此在执行function Person(job) {...}时,this是对您正在创建的Person对象的引用。 new语句执行以下操作:

  1. 创建Person对象。
  2. 调用构造函数“function Person(...)”,将this设置为对刚刚创建的对象的引用。
  3. 函数返回后,将新的Person对象返回给调用者。
  4. 有关执行上下文的更多信息,请参阅here