单手一个八拍,带你实现new操作符 ~skr skr

new 都做了哪些事?

    1. 创建了一个新对象
    1. 将新对象的 proto属性 连接到 构造函数的原型 prototype,
    1. 调用一次函数 并且将this该为指向新创建的对象, 传入参数 判断返回值
    1. 如果构造函数无返回值,或者不是引用类型,返回新对象即可;否则为 构造函数的返回值。
    function myNew(func) {
        let res = {}; // 1. 创建一个新对象
        if (func.prototype !== null) {
        res.__proto__ = func.prototype; // 2.将构造函数的原型对象指向  新对象的原型 属性
    }
        let ret = func.apply(res, Array.prototype.slice.call(arguments, 1)); // 3. 将构造函数的 this 指向新创建的对象,并调用构造函数
        if ((typeof ret === "Object" || typeof ret === "Array") && ret !== null) { // 如果构造函数有返回值且是引用类型, 将它返回, 否则返回新对象
        return ret
        }
        return res
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意...
    霜天晓阅读 6,399评论 0 6
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 10,614评论 0 21
  • 第一章 错误处理: 错误: 程序运行过程中,导致程序无法正常执行的现象(即bug) 现象: 程序一旦出错,默认会报...
    fastwe阅读 4,834评论 0 1
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 13,090评论 0 3
  • 张浩千(10岁作) 万里雪飘颂剑侠 旁有松树无梅花 欲要拔出匣中剑 对天长叹息 坐于石凳长看剑 怎耐脸上无颜色 手...
    张童子阅读 1,066评论 0 0