面试题库 词条目录
前端Wiki/词条/new 的原理

new 的原理

定义用 new 调用构造函数时背后自动执行的四个步骤,创建实例并完成原型链接与初始化

new 的过程可以拆成四步:第一步创建一个空对象;第二步把空对象的原型指向构造函数的 prototype,建立原型链;第三步把构造函数的 this 绑定到新对象上并执行,完成属性赋值;第四步判断构造函数返回值,如果返回值是对象就用它,否则返回新对象。

面试官常要求手写 new 的实现。答题时先讲清四步流程,再写代码:函数内部先判空、设置原型、执行并判断返回。延伸考点是构造函数显式 return 一个新对象时,new 出来的实例会被替换;以及 ES6 的 class 写法本质上仍是这套机制。

JavaScript
// 手写 new
function myNew(Ctor, ...args) {
  if (typeof Ctor !== 'function') throw new TypeError('Ctor must be a function');
  const obj = Object.create(Ctor.prototype);
  const ret = Ctor.apply(obj, args);
  return ret instanceof Object ? ret : obj;
}

function Person(name) { this.name = name; }
Person.prototype.say = function () { return 'hi ' + this.name; };

const p = myNew(Person, 'Tom');
console.log(p.name, p.say(), p instanceof Person);   // Tom hi Tom true
⚠ 常见误区
🔗 相关词条原型与原型链this 指向与 call / apply / bind
← 返回来源章节原型与原型链