美文网首页你不知道的JavaScript
单手一个八拍,带你实现new操作符 ~skr skr

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

作者: sherlockAndy | 来源:发表于2019-07-19 22:20 被阅读1次

    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
    }

    相关文章

      网友评论

        本文标题:单手一个八拍,带你实现new操作符 ~skr skr

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