基本描述:new运算符创建用户定义对象数据类型的实例或带有构造函数({}或newObject())的内置对象的实例。内部实现我总结为以下5个步骤创建一个空对象(即{}或newObject)将构造函数的原型(prototype)赋值给新对象(__proto__)的原型(__proto__)来执行构造函数并指向this给新的对象(即构造函数。数据类型是否为对象(对象包括object、array、function,不包括null)如果构造函数执行后用户手动返回对象,则返回对象否则返回第一步创建的新对象实例1functionUser(){//构造函数不手动返回任何东西this.name=name;}User.prototype.show=function(){console.log(this.name)}letuser=newUser('小明')//console.log(user)=>{name:"小明"}不返回数据,正常获取实例对象实例2functionUser(){this.name=name;return'Iamastring'//这个构造函数手动返回基本类型(stringnumberundefinedboolean)ornull}User.prototype.show=function(){console.log(this.name)}letuser=newUser('小明')//console.log(user)=>return{name:"小明"}//构造函数虽然返回了数据,但是被忽略了,因为返回的是基本类型(或者null),所以也被忽略了,所以可以正常获取实例对象instance3functionUser(){this.name=name;return[1,2,3]//构造函数手动返回复合类型(ArrayObjectFunction)}User.prototype.show=function(){console.log(this.name)}letuser=newUser('小明')//console.log(user)=>[1,2,3]//构造函数返回数据,是复合类型,所以得到手动返回的数据实现了自定义的_newoperatorfunction_new(Con,...args){constobj={};Object.setPrototypeOf(obj,Con.prototype);//关联构造函数原型constnewObj=Con.apply(obj,args)//绑定构造函数的this是objreturnnewObjinstanceofObject?newObj:obj//如果构造函数执行的返回值是一个对象,那么就是用户手动返回的对象,//应该跟在用户的返回值后面,否则返回新建的对象}use_newfunctionUser(){this.name=名字;}User.prototype.show=function(){console.log(this.name)}letuser=_new(User,'小明')//console.log(user)=>返回{name:"小明"}总结如下.....哈哈哈!谢谢阅读
