JavaScript中的new关键字用法

3

使用或不使用 new 关键字调用 JavaScript 函数是否有区别?例如,如果我有以下函数:

function computer(){
  this.hardDrive = "big";
  this.processor = "fast";
}

我接下来会以两种不同的方式调用它:

var hp = computer();
var hp = new computer();

这两个函数调用有什么区别?

2个回答

8

没有使用new关键字时,this指向全局对象,而不是从函数返回的任何对象。

如果您执行代码,您会发现第一个hp将是undefined,而第二个将是[object Object]。此外,由于明显的原因,第一个不会有hardDriveprocessor属性,但第二个会有。

在第一个示例中,您的两个属性将被添加到window对象中。


1
第一个例子中(没有 new),this 不就是全局对象 window 吗?执行该函数会将 hardDriveprocessor 添加到全局对象中,对吧? - Joseph
1
不完全正确。ECMA-262 定义了执行上下文,它是该术语唯一用法的上下文。执行上下文包括所有局部变量、参数、作用域链等,也包括 this。调用时设置 this 的值与调用时所在的执行上下文或由调用创建的函数上下文没有任何关系。你只需要知道在全局代码中,this 引用全局对象。在任何其他上下文中,它都可以引用(几乎)任何东西,包括全局对象。 - RobG

1
第一个不使用 new,将会以 this 指向窗口对象运行。第二个使用 new,将创建一个新的空对象,并且该对象将成为函数内部的 this

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接