Javascript类,对象,新

时间:2015-07-26 15:21:23

标签: javascript

我写了以下代码

1

function Car() {
  this.make = "BMW"
}

var x = new Car().make
alert(x)

结果:显示警报宝马

2

function Car() {
  this.make = "BMW"
}

var x = Car().make //removed new keyword
alert(x)

结果:没有显示警报宝马。控制台出错“无法读取属性'make'未定义”

3

function Car() {
  this.make = "BMW"
  return this      //added return
}

var x = Car().make //removed new keyword
alert(x)

结果:显示警报宝马

当我回复'这个'时,有人可以解释,究竟发生了什么......?

1 个答案:

答案 0 :(得分:3)

当您致电Car()(没有new运算符)时,在函数内部,this引用全局上下文(例如window,如果您在浏览器中)。当您return this;时,您将返回全局对象。您还应该发现您的函数将全局对象的make属性设置为"BMW"(即alert(Car().make)后跟alert(make)应该两次警告相同的事情。 {1}}函数的默认返回值为return this;

使用undefined运算符时,会创建一个新对象,并在函数执行时绑定到newthis运算符返回构造函数返回的内容,如果构造不返回任何内容,则返回新对象。有关此问题的详细信息,请参阅the docs