模拟new操作符

new

一句话解释:

new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。

在JavaScript中调用new操作符的时候一共会进行四步操作:

  1. 创建一个空的JavaScript对象,{}
  2. 将新对象的隐式原型属性__proto__指向构造函数的显示原型
  3. 修改this指向,将构造函数的this指向新创建的对象。也即通过this定义在构造函数中的属性都会被定义给新创建的对象。
  4. 查看构造函数的返回值,返回基本值则忽略,返回对象类型则执行

了解了new操作符进行了怎样的操作之后就可以手动模拟实现这样一个过程了。

function ourNew(context) {
    //1.创建一个空对象
    let obj = {}
    //2.从参数中取出构造函数,arguments表示被传递给函数的所有参数组成的类数组
    let constructor = [].shift.call(arguments)
    //3.原型链的链接
    obj.__proto__ = constructor.prototype
    //4.将构造函数的this指向新创建的对象
    let somethingReturn = constructor.apply(obj, arguments)
    //5.返回新对象。查看构造函数是否有返回对象,有则返回该对象,无则返回新创建的对象
    // return obj
    return typeof somethingReturn === 'object' ? somethingReturn : obj
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容