new调用构造函数时,JavaScript引擎自动创建空对象并绑定this到该对象,分四步:创建继承自prototype的空对象、设为this、执行函数体、默认返回新对象;不加new则this指向全局或undefined;箭头函数不可new。

当用 new 调用构造函数时,JavaScript 引擎会自动创建一个空对象,并把 this 绑定到这个新对象上——所以构造函数内部的 this 就指向即将返回的新实例。
new 调用时的 this 绑定过程
这不是靠代码显式赋值,而是 JavaScript 运行时的内置机制。具体分四步:
- 创建一个全新的空对象(继承自构造函数的
prototype) - 将这个新对象设为构造函数执行时的
this - 执行构造函数体内的代码(属性和方法通过
this.xxx = ...挂载到新对象) - 若构造函数没有显式返回对象,则默认返回这个新对象
不加 new 时 this 指向完全不同
如果忘记写 new,函数就当作普通函数调用,this 通常指向全局对象(非严格模式下是 window 或 global),严格模式下是 undefined,容易引发意外覆盖或报错。
function Person(name) { this.name = name; }<br>const p1 = new Person('Alice'); // ✅ this → 新实例<br>const p2 = Person('Bob'); // ❌ this → window(非严格)或 undefined(严格)
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
箭头函数不能用作构造函数
箭头函数没有自己的 this,也不具备 prototype,更不支持 new 调用。试图 new () => {} 会直接抛出 TypeError。
手动模拟 new 的核心逻辑(便于理解)
下面是一个简化版的 myNew 实现,能清晰看到 this 是如何被绑定的:
function myNew(fn, ...args) {<br> const obj = Object.create(fn.prototype); // 创建新对象,链接原型<br> const result = fn.apply(obj, args); // 关键:用 obj 作为 this 执行 fn<br> return (result !== null && typeof result === 'object') ? result : obj;<br>}

















