js里我们经常看到类似上面的代码,从表面上看就知道new了一个person函数的实例对像tom,new时内部具体做了些什么呢,主要就做了这4件事
1.创建一个空对像(假设叫obj)
2.设置这个空对像的__proto__指向构造函数的prototype(obj.proto= person.prototype)
3.让构造函数里的this指向这个空对像,然后执行构造函数里的代码(this.name=“tom”,等价于obj.name=“tom”)
4.如果函数没return语句,或者return基本数据类型(number,boolean,string,undefined,null),则最终返回这个生成的对像,如果函数return一个引用类型的数据,那最终返回这个引用类型
第四点需要验证一下
可以看到return number基本类型1时,还是返回的那个内部生成的对像
可以看到return一个对像时,最终返回的是这个对像,另外我们看到这个对像里没有name属性,这说明什么,说明person函数里的this指向的还是内部生成的那个对像,并没有指向我们返回的这个对像
说了这么多,是不是对new的实质了解了,我们来自己实现个new函数加深下加深下理解
看看是不是和文章最开始打印出的结果一样的,这样我们就简单实现了一个自己的new