当使用 new 的时候发生了什么

先上代码

// var obj = new Func()
function _new() {
    //1.拿到传入的参数中的第一个参数,即构造函数名Func
    var Func = [].shift.call(arguments)
    //2.创建一个空对象obj,并让其继承Func.prototype
    var obj = Object.create(Func.prototype)
    //3.执行构造函数,并将this指向创建的空对象obj
    Func.apply(obj,arguments)
    //4.返回创建的对象obj
    return obj
}

不禁想问,使用 Object.create又发生了什么?

不管了,上代码

function nativeCreate(prototype) {
    var Ctor  = function() {}
    Ctor.prototype = prototype
    var result = new Ctor
    return result
}

居然又出现了 new,将上文的 _new 函数改造一下

// var obj = new Func()
function _new() {
    //1.拿到传入的参数中的第一个参数,即构造函数名Func
    var Func = [].shift.call(arguments);
    //2.创建一个空对象obj
    var obj = {}
    //3. 让其继承Func.prototype
    obj.__proto__ = Func.prototype
    //4.执行构造函数,并将this指向创建的空对象obj
    Func.apply(obj,arguments)
    //5.返回创建的对象obj
    return obj
}
Table of Contents