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

这几天一直在讲面试题,其中有一个题是这样的,“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__这里,我对它的理解比上一期讲到这里时更深刻了。也就是说,不管你懂没懂,我反正是懂了。”

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

原文发布于微信公众号 - web前端教室(webfeel)

原文发表时间:2017-11-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信公众号:Java团长

Java基础04 封装与接口

总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型。对象可以有状态和动作,即数据成员和方法。

1462
来自专栏维C果糖

史上最简单的 MySQL 教程(十一)「列类型 之 字符串型」

所谓的列类型,其实就是指数据类型,即对数据进行统一的分类,从系统的角度出发是为了能够使用统一的方式进行管理,更好的利用有限的空间。

41910
来自专栏java学习

Java每日一练(2017/7/16)

最新通知 ●回复"每日一练"获取以前的题目! ●【新】Ajax知识点视频更新了!(回复【学习视频】获取下载链接) ●答案公布时间:为每期发布题目的第二天 ★【新...

3087
来自专栏编程

python史上最全列表知识

python连载第十五篇~list列表 该篇整体结构如下: 列表定义 列表元素访问 修改,添加 各种删除方法 列表切片读取内容 列表排序 列表插入,复制 列表加...

2055
来自专栏Java学习网

Java中提高代码复用性的方法及规范总结

一个好的程序员一定是用最少的代码实现最多的功能,代码复用是程序员所追求和期望的,这也是Java语言所提倡的;根据以往开发经验整理了一些能够提高代码复用性方法和规...

4047
来自专栏程序员八阿哥

王老板Python面试(7):年薪20万的阿里巴巴Python工程师面试题

随着人工智能时代的到来,Python工程师的需求量也在与日俱增。现在,很多知名公司都或多或少的在使用Python。而对于Python工程师来说,进入大公司,是一...

1111
来自专栏HappenLee的技术杂谈

C++雾中风景番外篇:理解C++的复杂声明与声明解析

在编写C/C++代码时偶尔能看到如下的复杂声明:float(*(*e[10])(int*))[5]。我想你的第一反应一定是:MMP。虽然我们在实际工作之中是很少...

892
来自专栏阿凯的Excel

Python读书笔记21(函数与列表)

上期和大家分享了向函数传递列表,今天继续来聊聊通过函数对列表进行操作。 ? 这个函数功能实现了两个列表内容的互换。 假如我们有个成绩列表,将不及格的成绩赋值给新...

3465
来自专栏老马说编程

计算机程序的思维逻辑 (14) - 类的组合

上节我们通过类Point介绍了类的一些基本概念和语法,类Point中只有基本数据类型,但类中的成员变量的类型也可以是别的类,通过类的组合可以表达更为复杂的概念。...

2209
来自专栏Vamei实验室

Java基础04 封装与接口

总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型。对象可以有状态和动作,即数据成员和方法。 到现在为止,数据成员和方法都是同时开放...

2017

扫码关注云+社区

领取腾讯云代金券