那么,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;
}