js中的new干了些什么事呢? 1.会把当前函数当做普通函数执行 2.要保证函数中的this 指向创建的实例 3.默认创建了当前类的实例 4.如果当前类有引用类型的返回值,则当成是一个普通函数执行, 如果当前类没有返回值,new操作则会创建一个当前类的实例,并返回
function _new(Func,...args){
//将新创建的对象指向传入类的原型
// let obj = {};
// obj.__proto__ = Func.prototype; //如果没有这一部,创建的只是一个普通对象,不能指向传入的原型,不能调用Func原型上的方法
let obj = Object.create(Func.prototype);
//将函数执行,返回结果如果是有值的就以函数返回为主,如果没有返回值,则返回一个新对象,这个对象为Func的实例
let result = Func.call(obj,...args);
if ((result !== null && typeof result === "object") || (typeof result === "function")) {
return result;
}
return obj;
}
function Dog(name,age){
this.name = name;
this.age = age;
this.run = function(){
console.log('i can run');
}
}
Dog.prototype.eat = function(){
console.log('i can eat');
}
let d = _new(Dog,'tom',2);
console.log(d)