Javascript的new操作符是什么_它背后做了什么?

admin 百科 15
new操作符执行四步:创建空对象、设置原型链、绑定this并执行构造函数、按返回值决定最终结果;省略new会导致this指向错误或返回undefined;箭头函数因无prototype和[[Construct]]不可被new调用。

Javascript的new操作符是什么_它背后做了什么?-第1张图片-佛山资讯网

new 操作符用于创建一个用户定义的对象类型的实例,或具有构造函数的内置对象类型的实例。 它不是简单的“调用函数+返回对象”,而是一套有明确步骤的机制——理解这些步骤,才能真正明白为什么有些构造函数必须用 new 调用,以及不加 new 时为何会出问题。

new 执行时的四个关键步骤

当你写 const obj = new Constructor(arg1, arg2),JavaScript 引擎内部会依次做以下四件事:

  • 创建一个全新的空对象(即 `{}`)
  • 将这个新对象的 [[Prototype]](也就是 __proto__)指向 Constructor.prototype
  • 以这个新对象为 this,执行 Constructor 函数体(传入指定参数)
  • 如果构造函数显式返回了一个「对象类型」的值(如对象、数组、函数、正则等),就返回该值;否则,返回上一步创建的那个新对象

为什么省略 new 可能导致 bug?

如果不写 new,构造函数就只是普通函数调用,this 通常指向全局对象(非严格模式下是 windowglobal,严格模式下是 undefined),属性会被挂到错误的地方:

function Person(name) {
  this.name = name;
}
const p1 = new Person('Alice'); // ✅ 正常:p1.name === 'Alice'
const p2 = Person('Bob');         // ❌ 错误:this 是 window,window.name = 'Bob'

登录后复制

更隐蔽的问题是:如果构造函数里没有给 this 赋值,又没 return 对象,那它会默默返回 undefined,容易引发后续报错。

立即学习“Java免费学习笔记(深入)”;

标签: javascript java app win new操作符 为什么

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~