0

我在使用一些基本的 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 初学者,我不知道为什么长度属性是未定义的。有什么帮助吗?

4

2 回答 2

10

您错过了new关键字:

var tank1 = new tank();
于 2013-05-29T03:45:05.803 回答
1

当你执行 tank() 时,函数的执行上下文就是window对象。您正在做的是向窗口对象添加“宽度”和“长度”字段,如果您执行window.lengthwindow.widthtank()调用之后,您可以看到这一点。您应该看到值 70 和 50。由于该tank函数不返回值,因此该语句var tank1 = tank();有效地设置tank1undefined,因此您得到了错误。

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

  1. 创建Person对象。
  2. 调用构造函数“ function Person(...)”,将 设置为this对它刚刚创建的对象的引用。
  3. Person函数返回后,将新对象返回给调用者。

有关执行上下文的更多信息,请参见此处

于 2013-05-29T04:10:19.103 回答