new 做了什么?
1.创建一个空对象
2.让空对象的__proto__等于构造函数的原型
3.调用构造函数,并更改this为上面所空对象
4.返回该对象
手写我们自己new
function father(name,age) {
this.name = name; //名称
this.age = age; //年龄
}
//在原型上添加say方法
father.prototype.say = function (){
console.log('say:'+this.name)
}
function mynew(ClassFn,...data){
let obj = {}; //创建一个空对象
obj.__proto__ = ClassFn.prototype; //拥有ClassFn原型上的方法或属性
ClassFn.call(obj,...data); //拥有构造函数中的属性并可在实例化时赋值
return obj; //返回该对象
}
let a = mynew(father,'儿子',18);
a.say();
输出:say:儿子