构造函数显式返回对象会改变实例化结果:一查返回值是否为非null对象(typeof result === 'object' && result !== null);二查instanceof失效(obj instanceof myconstructor为false);三查原型链断裂(object.getprototypeof(obj) !== myconstructor.prototype)。

直接检查三个关键点就能确认构造函数是否因显式返回对象而改变了实例化结果。
看返回值是不是对象类型
显式返回的对象必须是引用类型(普通对象、数组、函数、正则、日期、Promise 等),且不能为 null。可以用以下方式快速判断:
typeof result === 'object' && result !== null- 注意:
null虽然typeof null是'object',但它是特例,会被 JS 忽略,不触发替换
查 instanceof 是否失效
如果构造函数返回了自定义对象,instanceof 会返回 false,这是最直观的信号:
const obj = new MyConstructor();obj instanceof MyConstructor // false → 说明被替换了obj instanceof Object // true → 它只是个普通对象
验原型链是否断裂
原实例的 __proto__ 应指向构造函数的 prototype,而被返回的对象不会自动绑定这个关系:
Object.getPrototypeOf(obj) === MyConstructor.prototype // falseobj.constructor // 可能是 Object 或其他构造器,甚至 undefined- 如果想验证原型是否正常,可提前保存:
const proto = MyConstructor.prototype;,再比对
顺便留意 constructor 属性是否丢失
被替换后的对象通常没有正确的 constructor 指向,即使手动设置也要小心覆盖:
obj.constructor // 往往是 Object,不是 MyConstructor- 若需修复,可显式赋值:
obj.constructor = MyConstructor;,但这不恢复原型链或instanceof行为
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











