自己实现一个new 运算符
function _new(){
//首先拿到函数 这里也可以使用ES6 Array.from将arguments转为数组,但是因为我们后面要用到除了fun以外的其他参数,给call使用,所以用shift更合适
var fun = [].shift.call(arguments);
// 创建一个新的对象,让它继承fun的原型
var obj = Object.create(fun.prototype);
//改变this的指向,让this指向刚才传创建的obj
var result = fun.call(obj,...arguments);
//判断返回值是不是对象,如果是返回,如果不是返回刚才创建的新对象
return typeof result == 'object' ? result : obj
}
function Person(name,age){
this.name = name;
this.age = age;
}
var p = _new(Person,'wucr',12)