前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >__proto__ 和 prototype的关系 | 零基础班0915-今日重点

__proto__ 和 prototype的关系 | 零基础班0915-今日重点

作者头像
web前端教室
发布2018-02-07 13:57:32
4310
发布2018-02-07 13:57:32
举报
文章被收录于专栏:web前端教室web前端教室

这几天一直在讲面试题,其中有一个题是这样的,“new操作符做了些啥?”

这个题目是问你生成一个对象的实例的过程,那么常规回答就是这样:

1.先创建了一个新的空对象

2.然后让这个空对象的__proto__指向函数的原型prototype

3.将对象作为函数的this传进去,如果return 出来东西是对象的话就直接返回 return 的内容,没有的话就返回创建的这个对象。

按说这个题目讲到这里也就可以结束了,但我的课程一向是以“引申”的方式来讲解的,既然已经提到 __proto__了,那么必须讲一下它和prototype的关系。

其实说来也很简单,在js中函数都有prototype,它指向一个对象,这个对象中包含constructor,它指向的是它所在的prototype所在的那个函数。

这个说法是我自己的理解,并不是书上或是网上哪些的定义,但应该是没有错的。而且我讲课基本上很少照着念定义,画个示意图吧,毕竟上面那段话还是有点绕的,

就是这样如上图所示,

接下来看由这个构造器所生成的实例,

可以看到,这个实例没有prototype,自然也就不会有什么constructor了

那么如果我想看到这个实例的构造器该怎么办呢?这时就该 __proto__上场了,

这张截图包含的信息比较多,

(1)、实例没有prototype;

(2)、实例的__proto__却可以直接访问生成这个实例的构造器;

(3)、通过“实例.__proto__.constructor”也可以看到输出的结果就是构造器;

(4)、最重要就是“实例的__proto__和构造器的prototype的指向”,是相等的。

说到这里,可以确定的说,__proto__就是用来获得实例的构造器的。因为不管网上其它的各种资料说的多么详细、多么复杂或是天花乱坠,其实上面的那几张截图已经说明了事实。

同学们,关于这个知识点,我的心得就是,“讲课这东西真的就是越讲越好,至少在__proto__这里,我对它的理解比上一期讲到这里时更深刻了。也就是说,不管你懂没懂,我反正是懂了。”

那么,你到底是懂还是没懂呢?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 web前端教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.先创建了一个新的空对象
  • 2.然后让这个空对象的__proto__指向函数的原型prototype
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档