new操作符

194 阅读1分钟

new操作符具体干了什么

  • 创建一个空对象,并且this变量引用该对象(将构造函数的作用域赋给新对象),同时还继承了该函数的原型
  • 为这个新对象添加属性、方法
  • 新创建的对象由this所引用,并且最后隐式的返回this(返回新对象)

实现:

  function myNew(ctr) {
    let obj = {};
    obj.__proto__ = ctr.prototype;

    const args = [...arguments].slice(1);
    console.log(args);

    let result = ctr.apply(obj, args);

    var isObj = (typeof result === 'object' && result !== null);
    return isObj ? result : obj;
  }

  function Person(name, age) {
    this.name = name;
    this.age = age
  }
  let p = myNew(Person, 'jack', 'kk');
  console.log(`p:`, p);