Javascript新关键字用法

Javascript新关键字用法,javascript,object,new-operator,Javascript,Object,New Operator,使用或不使用new关键字调用javascript函数之间有区别吗?例如,如果我有以下功能: function computer(){ this.hardDrive = "big"; this.processor = "fast"; } 然后我用两种不同的方式来称呼它: var hp = computer(); var hp = new computer(); 两个函数调用之间的区别是什么?如果没有new,这个指的是全局对象,而不是从函数返回的任何对象 如果要执行代码,您会发现第一个h

使用或不使用new关键字调用javascript函数之间有区别吗?例如,如果我有以下功能:

function computer(){
  this.hardDrive = "big";
  this.processor = "fast";
}
然后我用两种不同的方式来称呼它:

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

两个函数调用之间的区别是什么?

如果没有
new
这个
指的是全局对象,而不是从函数返回的任何对象

如果要执行代码,您会发现第一个
hp
将是
undefined
,而第二个将是
[object]
。此外,出于明显的原因,第一个将不具有
硬盘驱动器
处理器
的属性,但第二个将具有


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

第一个属性不使用
新建
,将与引用窗口对象的
一起运行。第二个,使用
new
,将创建一个新的空对象,该对象将是函数中的
this

复制和,另请参见。第一种情况下的
this
(无
new
)不就是
窗口的全局对象吗?执行该函数会将
硬盘驱动器
处理器
添加到全局对象?一点也不。ECMA-262定义,它是使用该词的唯一上下文。执行上下文由所有局部变量、参数、范围链等组成,并包括这些。由调用设置的值与调用的执行上下文或调用创建的函数上下文完全无关。您只知道在全局代码中,它引用全局对象。在任何其他上下文中,它可以引用(几乎)任何内容,包括全局对象。