我写了以下代码
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)
结果:显示警报宝马
当我回复'这个'时,有人可以解释,究竟发生了什么......?
答案 0 :(得分:3)
当您致电Car()
(没有new
运算符)时,在函数内部,this
引用全局上下文(例如window
,如果您在浏览器中)。当您return this;
时,您将返回全局对象。您还应该发现您的函数将全局对象的make
属性设置为"BMW"
(即alert(Car().make)
后跟alert(make)
应该两次警告相同的事情。 {1}}函数的默认返回值为return this;
。
使用undefined
运算符时,会创建一个新对象,并在函数执行时绑定到new
。 this
运算符返回构造函数返回的内容,如果构造不返回任何内容,则返回新对象。有关此问题的详细信息,请参阅the docs。