红宝书第四版的一个错误?

在 JavaScript高级程序设计(第四版)的 8.4节,那一节在介绍类,在第253页,pdf的话是在278页。

这里马特(红宝书第四版作者)想要说明的一个观点是,直接new 一个类,和new 类的构造函数 的结果是不一样的,然后它给出了一些代码,通过输出结果证明了确实不一样。

但是这里马特犯了一个错误,他试图通过Person.constructor获得类里面定义的constructor,但是实际上constructor是定义在Person.prototype上的,所以应该通过Person.prototype.constructor来获得这个构造函数。

以下是两者区别的直观显示。

class Person {constructor() {console.log("this is my constructor")}
}
console.log(Person.prototype.constructor.toString())
console.log("--------")
console.log(Person.constructor.toString())

在把马特例子里获得构造器的代码更改后,我们可以获得以下结果。

输出的结果是一样的,所以直接调用 new Person(), 还是调用 new Person.prototype.construcor() 的结果都是一样的。

所以马特的观点被否决了。

实际上,利用 new Person() 在构造一个新实例的时候会调用constructor,所以两者的结果是不是一样,我们应该去关注Person.prototypePerson.prototype.constructor.prototype一不一样,因为这个属性决定了构造出来的实例的原型对象一不一样。

很显然是一样的,因为Person.prototype.constructor循环引用Person


总结一下,马特作为大师,这里很可能只是一时糊涂,而我们作为初学者如何避免类似的错误呢?

我们需要明确,一个函数的prototype属性并不一定是这个函数的原型。具体文章可以见我的博文 论构造函数的原型是谁_Wuuconix的博客-CSDN博客

在今天这个例子中,class Person实际上也是一个函数,而马特误把 这个类的原型 想成了 Person.prototype,而它们实际上是不同的。

class Person {}
console.log(Person.prototype === Object.getPrototypeOf(Person)) //false

这也是为什么我们不能通过Person.constructor获得到我们定义的构造器,因为Person这个类或者说函数的原型不是Person.prototype, 而我们写的这个构造函数是位于 Person.prototype上的。

红宝书第四版的一个错误?相关推荐

  1. 2013年CISA中英对照题目解析合集国盟官方(红宝书第四版)

    2013年CISA中英对照题目解析合集国盟官方(红宝书第四版) 本书为国际信息安全学习联盟(简称国盟)CNCISA(中国CISA)家园历年发布的中文对照题目解析合集(红宝书)第四版.本书的目的在于向C ...

  2. 类型“unknown”上不存在属性“foreach”_JavaScript红宝书第四版精简解析系列--映射Map数据类型...

    Map数据类型 顾名思义 也就是映射类型,包含一个[[Entries]]私有特性 我们可以使用一个二维数组作为初始值 const map1 = new Map([[1, 1],[2, 2],[3, 3 ...

  3. OpenGL与红宝书第八版第一个程序配置

    本文档参考文献为<OpenGL编程指南>(原书第8版)中文版. 下面直接讲解笔者接触并初学OpenGL之路. 由于笔者学习方向的关系,有时接触到某些开源框架的时候,里面涉及到OpenGL. ...

  4. 关于在vs2013中配置opengl红宝书第八版环境

    转自 http://blog.csdn.net/qq821869798/article/details/45247241 本人刚开始学习opengl,买了一本opengl红宝书第八版, 第一个例子研究 ...

  5. 用最简单的方法配置运行OpenGL红宝书第9版源码示例

    笔者真是苦逼啊,之前花了很多时间去学习"基于OpenGL的图形学"的开头部分,包括书本和老师的PPT.但是到自己尝试编译运行示例代码的时候真是困难重重.而且!在自己胡乱摸爬滚打终于 ...

  6. JavaScript 红宝书第4版上市啦!「文末送几本给大家」

    文末有活动 人的一生中总要读几本经典书,在这个"经典"泛滥的年代,什么才是权威的代表,我想大概是一本的书的口碑,能积累下上佳口碑的书,往往也是能经得住时间推敲的.比如这本: 我相信 ...

  7. OpenGL编程指南 (红宝书 第八版) 样例代码配置问题汇总

    代码下载 环境配置问题glut 和 glew1 基本头文件和库文件配置2 以下是正文内容 第一个渲染程序Triangles3 第三章 03ch03_drawcommands4 本文是笔者自己在配置中遇 ...

  8. 【红宝书笔记精简版】 第二十四章 网络请求与远程资源

    目录 24.1 XMLHttpRequest 对象 24.1.1 使用 XHR 24.1.2 HTTP 头部 24.1.3 GET 请求 24.1.4 POST 请求 24.1.5 XMLHttpRe ...

  9. 【红宝书笔记精简版】第十二章 BOM

    目录 12.1 window 对象 12.1.1 Global 作用域 12.1.2 窗口关系 12.1.3 窗口位置与像素比 12.1.4 窗口大小 12.1.5 视口位置 12.1.6 导航与打开 ...

  10. OpenGL红宝书正序解读(一)

    OpenGL红宝书正序解读(一) 第一章:OpenGL简介 第二章:状态管理和绘制几何物体 绘图工具箱 清除窗口 指定颜色 强制完成绘图操作 坐标系统工具箱 描述点.直线.多边形 什么是点.直线.多边 ...

最新文章

  1. 【C++】LINK类型错误分析记录
  2. Windows 7官方主题之“海上航行”
  3. m3u8文件在手机上用什么软件看_新技能Get!教你制作m3u8文件 创建属于自己的直播视频列表...
  4. Navicat——MySQL之delimiter默认设置问题
  5. Kettle使用_18 分组组件计算百分位数
  6. tcp压测工具_【解决方案】性能压测及分析调优实践
  7. mysql 外键关联
  8. 20172331 《Java程序设计》第3周学习总结
  9. 【转载】 Single sign on
  10. slack 聊天机器人_无法筹集资金的Slack机器人
  11. 【自学51单片机】1 -- 初步认识单片机及其学习方法 和 单片机基础知识介绍
  12. 信号与系统中的信号带宽理解
  13. python数据分析之航空公司客户价值分析
  14. 2019-04-07 Python之利用PIL改变图片颜色和生成手绘图
  15. vue antvG6 绘制组织架构图
  16. 基于高通sdx12平台,简单介绍编译(bitbake)
  17. 智能渠道商分销系统开发方案:打通协作壁垒,实现渠道商数字管理
  18. 网络安全与渗透:文件包含漏洞(十一)此生无悔入华夏,男儿何不带吴钩
  19. 计算机键盘操作步骤图解,怎么给电脑做系统步骤图解
  20. 你不知道的USB知识二——USB认证

热门文章

  1. 智能计算之蚁群算法(ACO)介绍
  2. 行式 Excel 文件比对
  3. WebRTC + JsSIP + freeSWITCH一对一视频聊天
  4. WiFi mac地址详解
  5. SVN 客户端下载与安装
  6. 计算机组成原理实验数据通路,《计算机组成原理》实验报告——数据通路
  7. Java 杨辉三角形
  8. makefile的简单编写
  9. faster rcnn 计算mAP
  10. 实时数据库之数据采集