JS new的过程

发布日期:2018-06-05 阅读量:512
    function Person(name) {
        this.name = name;
    }

1. 创建一个空对象

    var p = {}

2. 将p的原型指向构造函数的原型

    p.__proto__ = Person.prototype;

3. 将this指向改为p

    var res = Person.apply(p, args);

4. 处理返回值情况

   如果构造函数有返回,返回值是一个基本数据类型,则忽略,直接返回p;如果返回值是一个引用数据类型 则返回的是该返回值

    res instanceof Object? res: p

5. 总结

    function createInstance(fn, ...args){
        var obj = {};
        obj.__proto__ = fn.prototype;
        var res = fn.apply(obj, args);
        return res instanceof Object? res: obj;
    }