new 执行四步:创建空对象、绑定原型(obj.__proto__ = constructor.prototype)、执行构造函数、返回对象;手写 mynew 需显式设置 proto 以确保 instanceof 和 isprototypeof 正常工作。

理解 new 的核心行为
new 关键字执行时实际做了四件事:创建空对象、绑定原型、执行构造函数、返回正确对象。其中“绑定原型”是实现原型链识别的关键——新对象的 __proto__ 必须指向构造函数的 prototype,这样 instanceof 和 isPrototypeOf 才能正常工作。
手写 new 模拟器的基本结构
只需 4 步,不依赖 this 绑定黑魔法,清晰体现原型链建立过程:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 创建一个空对象 obj
- 设置 obj.__proto__ = Constructor.prototype(建立原型链)
- 用 call 把构造函数的 this 指向 obj 并执行
- 判断构造函数返回值:如果是对象就返回它,否则返回 obj
完整可运行代码
注意:必须显式设置 __proto__,这是识别原型链的必要条件
function myNew(Constructor, ...args) {
const obj = {};
obj.__proto__ = Constructor.prototype; // ? 核心:连接原型链
const result = Constructor.apply(obj, args);
return (result !== null && typeof result === 'object') ? result : obj;
}
// 测试
function Person(name) {
this.name = name;
}
Person.prototype.say = function() { return 'hi'; };
const p = myNew(Person, 'Alice');
console.log(p.name); // 'Alice'
console.log(p.say()); // 'hi'
console.log(p instanceof Person); // true ✅
console.log(Person.prototype.isPrototypeOf(p)); // true ✅
为什么不能只用 Object.create?
Object.create(Constructor.prototype) 确实能设好原型,但它跳过了构造函数调用。myNew 必须把创建、连原型、执行三者串起来。如果只写 Object.create(Constructor.prototype) 再 call,就丢失了“新对象由构造函数初始化”的语义,且无法处理构造函数返回自定义对象的情况。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










