new一个函数发生了什么

183 阅读1分钟

博客链接

Edit new原理

  • 1.创建一个空对象obj
  • 2.指定this, 执行构造函数
  • 3.指定公共空间:
    • 函数都写在公共空间prototype
    • 修改空对象obj的_ proto _
  • 4.return obj

封装

function myNew(construct: Function, ...args: any[]) {
  // 创建一个空对象
  const obj = {};
  // 修改空对象的原型链
  obj.__proto__ = construct.prototype;
  // 执行构造函数并将构造函数this指向空对象
  construct.call(obj, ...args);
  return obj;
}

测试

function Person(name) {
 this.name = name;
}
Person.prototype.say = function () {
 console.log("My name is", this.name);
};

const c = myNew(Person, "jack");
c.say();