Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一些基本javascript的问题_Javascript - Fatal编程技术网

一些基本javascript的问题

一些基本javascript的问题,javascript,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

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

您错过了
new
关键字:

var tank1 = new tank();
执行tank()时,函数的执行上下文是
窗口
对象。您要做的是将“宽度”和“长度”字段添加到窗口对象,如果在调用
tank()
之后执行
window.length
window.width
,则可以看到这一点。您应该看到值70和50。由于
tank
函数不返回值,因此语句
var tank1=tank()有效地将
tank1
设置为
undefined
,因此会出现错误

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

  • 创建
    Person
    对象
  • 调用构造函数“
    函数Person(…)
    ”,将
    this
    设置为对它刚刚创建的对象的引用
  • 函数返回后,将新的
    Person
    对象返回给调用方
  • 有关执行上下文的更多信息,请参阅