What
new关键字用于创建一个构造函数的实例对象
new关键字做了哪些事情
- 创建了一个新的obj对象
- 这个对象的__ptoto__属性指向构造函数的prototype
- 把这个对象作为构造函数的执行上下文this
- 如果有返回值,返回执行结果,没有返回值就返回这个对象
代码实现
function myNew(Func,...args){
//首先创建一个对象
let obj = {};
//obj的隐式原型对象指向Func构造函数的显示原型对象
obj.__proto__ = Func.prototype;
//将Func的上下文改为obj
let result = Func.apply(obj,args);
//如果没有返回值就返回obj
return result instanceof Object?result:obj;
}
使用
let Person =function(name,age){
this.name = name,
this.age = age;
}
Person.prototype.getthis = function(){
console.log(this.name)
}
let person1 = myNew(Person,'lxy',18);
person1.getthis();