我在使用一些基本的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初学者,我不知道为什么长度属性是未定义的。有什么帮助吗?
答案 0 :(得分:10)
您错过了new
关键字:
var tank1 = new tank();
答案 1 :(得分:1)
执行tank()时,函数的执行上下文是window
对象。您正在做的是向窗口对象添加“width”和“length”字段,如果在window.length
调用后执行window.width
和tank()
,则可以看到此字段。您应该看到值70和50.由于tank
函数未返回值,因此语句var tank1 = tank();
有效地将tank1
设置为undefined
,因此您获得的错误
在第二个语句中,您正在调用Person
构造函数,因此在执行function Person(job) {...}
时,this
是对您正在创建的Person
对象的引用。 new
语句执行以下操作:
Person
对象。function Person(...)
”,将this
设置为对刚刚创建的对象的引用。Person
对象返回给调用者。有关执行上下文的更多信息,请参阅here。