• 主页
  • 个人简介
    • 圣墨 photo

      圣墨

      一个爱折腾,有诗有远方的人

    • Learn More
    • Github
    • Cnblogs
    • Weibo
  • 文章
    • 所有文章
    • 所有标签
  • Html&Css
  • Javascript
  • 设计模式
  • 前端性能优化
  • 原生实现专题
  • 数据结构与算法
  • Book
  • 面试题
  • 前端工具
  • 随记

手动实现new

21 Nov 2019

Reading time ~1 minute

手动实现new

new 做了什么操作

1、创建了一个空对象
2、链接到原型(空对象的`__proto__`成员指向构造对象`prototype`成员对象)
3、改变this的指向,让this指向新创建的实例对象
4、返回一个新对象

实现

new 的方法无法重写,模拟实现new 方法

function myNew() {
    //1、创建一个空对象
    const obj = {}

    //2、取出参数第一个构造函数
    const contructor = [].shift.call(arguments);
    // 3、链接到原型
    obj.__proto__ = contructor.prototype;

    // 4、改变this的指向
    const result = contructor.apply(obj,arguments);

    // 5、返回一个新对象
    return typeof result === 'object'? result : obj;
}


javascript  微博  QQ  朋友圈