JavaScript原理——模拟new

function _new() {
    //1.取出第一个传入参数并删除(实际new过程不需要这一步)
    var constructor = Array.prototype.shift.call(arguments);
    //2.创建新对象,并将其原型链指向构造函数的原型
    var obj = Object.create(constructor.prototype);
    //3.传入参数、执行构造函数,并将this指向创建的新对象
    var res = constructor.apply(obj, arguments);
    //4.如果返回值是对象,则返回res,否则返回obj
    return res instanceof Object ? res : obj;
}
//等价于 var p = new Person('zhangsan', 'male');
var p = _new(Person, 'zhangsan', 'male')

猜你喜欢

转载自blog.csdn.net/baidu_38798835/article/details/108516420