new操作符通过四步创建独立对象:新建空对象并设置原型→绑定this执行构造函数→默认返回this或显式返回对象→确保实例属性不共享。

构造函数配合 new 关键字创建全新对象引用,本质是 JavaScript 引擎执行一套标准化的实例化流程,最终返回一个独立、互不干扰的对象。
new 操作符触发的四步初始化过程
当你写 new Person("Alice") 时,JavaScript 引擎自动完成以下操作:
- 创建一个空的普通对象(即
{}),其内部原型([[Prototype]])被设为构造函数的prototype属性; - 将该新对象作为
this绑定,执行构造函数体内的代码(如赋值this.name = name); - 若构造函数没有显式返回对象,则默认返回这个新创建的
this对象; - 若构造函数显式返回一个对象(非
null的对象或数组等引用类型),则以该返回值为准,忽略默认的this;
每个 new 实例都是独立的对象引用
因为每次 new 都会生成一个全新的空对象,并把属性挂载到它自身(而非共享在原型上),所以多个实例之间互不影响:
// 示例
function Counter() {<br>
this.count = 0;<br>
}<br>
const a = new Counter();<br>
const b = new Counter();<br>
a.count++;<br>
console.log(a.count); // 1<br>
console.log(b.count); // 0
这里 a 和 b 指向内存中两个不同的对象,修改其中一个的 count 不会影响另一个。
构造函数本身不保存实例状态
构造函数只是一个普通函数,它不存储任何已创建的实例。所有实例数据都存在于各自对象内部,通过 this 写入。你可以验证:
-
a.constructor === Counter成立,说明实例知道它的构造来源; -
a.__proto__ === Counter.prototype成立,说明原型链连接正确; - 但
Counter.instances或类似静态集合并不存在——除非你手动添加(如用闭包或类字段模拟);
不加 new 调用构造函数的风险
如果忘记 new,构造函数会作为普通函数执行,this 指向全局对象(非严格模式)或 undefined(严格模式),导致意外污染或报错:
const c = Counter("Bob"); // 忘了 new<br>
console.log(c); // undefined(严格模式)<br>
console.log(window.name); // "Bob"(非严格模式下污染全局)
为避免这类问题,现代写法常用 class 语法(强制 new)或在构造函数内做 this 检查。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











