js实现一个new运算符

172 阅读1分钟

那么,new到底做了什么? 简单来讲,它主要做了四步

1)创建一个新对象

2)将构造函数的prototype赋值给新对象的__proto__

3)构造函数中的this指向新对象,并且调用构造函数

4)如果构造函数无返回值,或者不是引用类型,返回新对象;否则为 构造函数的返回值。

function New(){     
    var tmp_arr = Array.from(arguments);
    var Func =tmp_arr[0];
    //1、创建一个新对象:obj
    var obj = {};
    //2、将构造函数的prototype赋值给新对象的__proto__
    obj.__proto__ = Func.prototype;
    //3、将构造函数的this指向新对象obj,并且调用这个新对象
    var result = Func.apply(obj,tmp_arr.slice(1,tmp_arr.length));
    //如果返回值不是引用类型,返回obj。 否则返回 result
    return result instanceof Object ? result : obj;
}