说说js里new一个实例具体做了些什么

在这里插入图片描述
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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值