红宝书第四版的一个错误?
红宝书第四版的一个错误?
在 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.prototype
和Person.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上的。
红宝书第四版的一个错误?相关推荐
- 2013年CISA中英对照题目解析合集国盟官方(红宝书第四版)
2013年CISA中英对照题目解析合集国盟官方(红宝书第四版) 本书为国际信息安全学习联盟(简称国盟)CNCISA(中国CISA)家园历年发布的中文对照题目解析合集(红宝书)第四版.本书的目的在于向C ...
- 类型“unknown”上不存在属性“foreach”_JavaScript红宝书第四版精简解析系列--映射Map数据类型...
Map数据类型 顾名思义 也就是映射类型,包含一个[[Entries]]私有特性 我们可以使用一个二维数组作为初始值 const map1 = new Map([[1, 1],[2, 2],[3, 3 ...
- OpenGL与红宝书第八版第一个程序配置
本文档参考文献为<OpenGL编程指南>(原书第8版)中文版. 下面直接讲解笔者接触并初学OpenGL之路. 由于笔者学习方向的关系,有时接触到某些开源框架的时候,里面涉及到OpenGL. ...
- 关于在vs2013中配置opengl红宝书第八版环境
转自 http://blog.csdn.net/qq821869798/article/details/45247241 本人刚开始学习opengl,买了一本opengl红宝书第八版, 第一个例子研究 ...
- 用最简单的方法配置运行OpenGL红宝书第9版源码示例
笔者真是苦逼啊,之前花了很多时间去学习"基于OpenGL的图形学"的开头部分,包括书本和老师的PPT.但是到自己尝试编译运行示例代码的时候真是困难重重.而且!在自己胡乱摸爬滚打终于 ...
- JavaScript 红宝书第4版上市啦!「文末送几本给大家」
文末有活动 人的一生中总要读几本经典书,在这个"经典"泛滥的年代,什么才是权威的代表,我想大概是一本的书的口碑,能积累下上佳口碑的书,往往也是能经得住时间推敲的.比如这本: 我相信 ...
- OpenGL编程指南 (红宝书 第八版) 样例代码配置问题汇总
代码下载 环境配置问题glut 和 glew1 基本头文件和库文件配置2 以下是正文内容 第一个渲染程序Triangles3 第三章 03ch03_drawcommands4 本文是笔者自己在配置中遇 ...
- 【红宝书笔记精简版】 第二十四章 网络请求与远程资源
目录 24.1 XMLHttpRequest 对象 24.1.1 使用 XHR 24.1.2 HTTP 头部 24.1.3 GET 请求 24.1.4 POST 请求 24.1.5 XMLHttpRe ...
- 【红宝书笔记精简版】第十二章 BOM
目录 12.1 window 对象 12.1.1 Global 作用域 12.1.2 窗口关系 12.1.3 窗口位置与像素比 12.1.4 窗口大小 12.1.5 视口位置 12.1.6 导航与打开 ...
- OpenGL红宝书正序解读(一)
OpenGL红宝书正序解读(一) 第一章:OpenGL简介 第二章:状态管理和绘制几何物体 绘图工具箱 清除窗口 指定颜色 强制完成绘图操作 坐标系统工具箱 描述点.直线.多边形 什么是点.直线.多边 ...
最新文章
- 【C++】LINK类型错误分析记录
- Windows 7官方主题之“海上航行”
- m3u8文件在手机上用什么软件看_新技能Get!教你制作m3u8文件 创建属于自己的直播视频列表...
- Navicat——MySQL之delimiter默认设置问题
- Kettle使用_18 分组组件计算百分位数
- tcp压测工具_【解决方案】性能压测及分析调优实践
- mysql 外键关联
- 20172331 《Java程序设计》第3周学习总结
- 【转载】 Single sign on
- slack 聊天机器人_无法筹集资金的Slack机器人
- 【自学51单片机】1 -- 初步认识单片机及其学习方法 和 单片机基础知识介绍
- 信号与系统中的信号带宽理解
- python数据分析之航空公司客户价值分析
- 2019-04-07 Python之利用PIL改变图片颜色和生成手绘图
- vue antvG6 绘制组织架构图
- 基于高通sdx12平台,简单介绍编译(bitbake)
- 智能渠道商分销系统开发方案:打通协作壁垒,实现渠道商数字管理
- 网络安全与渗透:文件包含漏洞(十一)此生无悔入华夏,男儿何不带吴钩
- 计算机键盘操作步骤图解,怎么给电脑做系统步骤图解
- 你不知道的USB知识二——USB认证