详细过程:1.创建一个空对象
2.给空对象的__proto__指向构造函数的prototype
3.构造函数中this指向新对象,并且赋值构造属性
4.返回新对象;
手写new:
function realizeNew(){
//创建一个空对象
var obj={}
//获取构造函数,并且把新创建对象的proto指向构造函数的原型
var Con=[].shift.call(arguments);//获取第一个参数(即传递的构造函数)
obj.__proto__=Con.prototype;
let result=Con.apply(obj,arguments);
return typeof(result)===‘object‘?result:obj;
}
//构造函数
function Person(name,age){
this.name=name;
this.age=age;
}
let person1=realizeNew(‘zhangsan‘,12);
console.log(person1.name);
console.log(person1.age);
参考文献:https://www.cnblogs.com/echolun/p/10903290.html
https://www.cnblogs.com/memphis-f/p/12029567.html
原文:https://www.cnblogs.com/mili3/p/14350452.html