你不知道的JavaScript

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

2019-07-19  本文已影响1人  sherlockAndy

new 都做了哪些事?

    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
}
上一篇下一篇

猜你喜欢

热点阅读