美文网首页
模拟new操作符

模拟new操作符

作者: 夏目祐太 | 来源:发表于2017-11-30 18:55 被阅读22次
function imitateNew(func, ...args) {
    let obj = Object.create(func.prototype);

    let o = func.apply(obj, args); 
            
    return typeof o === 'object' ? o : obj;
}

let person = imitateNew(function(name, age) {
      this.name = name;
        this.age = age; 
}, 'Alima', 17)

// {name: "Alima", age: 17}

使用new操作符调用构造函数经历的步骤

  1. 创建一个新对象,继承构造函数的原型对象
  2. 将构造函数的作用域赋给新对象(this指向新对象)
  3. 执行构造函数中的代码
  4. 返回新对象

返回的对象有三种情况

  1. 构造函数没有指定返回值,则返回构造函数的实例化对象
  2. 构造函数中返回值不是引用类型,则也返回构造函数的实例化对象
  3. 构造函数中返回值为引用类型,则返回该应用类型

注:object.create()

let obj = Object.create(func.prototype) => 将obj的 [[Prototype]] 属性指向func构造函数的原型对象上

相关文章

网友评论

      本文标题:模拟new操作符

      本文链接:https://www.haomeiwen.com/subject/cthbbxtx.html