new 操作符

2021-05-26  本文已影响0人  my木子

步骤

1、创建了一个空的 JS 对象(即{})
2、将空对象的原型指向构造函数的原型
3、将空对象作为构造函数的上下文(改变this指向)
4、对构造函数有返回值的判断,如果该函数没有返回对象,则返回 this

    function newOperator(ctor, ...args) {
      if (typeof ctor !== 'function') {
        throw 'newOperator函数的第一个参数必须是一个函数';
      };
      //1、创建一个空的对象
      let obj = {}; // let obj = Object.create({});
      //2、将空对象的原型prototype指向构造函数的原型
      Object.setPrototypeOf(obj, ctor.prototype); // obj.__proto__ = ctor.prototype
      //3、改变构造函数的上下文(this),并将剩余的参数传入
      let result = ctor.apply(obj, args);
      //4、在构造函数有返回值的情况进行判断
      return result instanceof Object ? result : obj;
    }

    function student(name, age) {
      this.name = name;
      this.age = age
    }

    let zs = newOperator(student, '张三', 20);
    console.log(zs);

箭头函数,为什么不能通过new生成实例

上一篇 下一篇

猜你喜欢

热点阅读