知识卡片

原型才是类的真正标识

专业/工作 · 416

内容

在JavaScript里,两个对象属于同一个类的判定标准只有一个:它们是否继承自同一个原型对象,而不是它们是否由同一个构造函数创建。构造函数只是类的”外在名片”——它给类起了名字、方法上挂着instanceof这样看起来在检测构造函数的语法糖,但instanceof实际检测的是对象的原型链上是否存在某个原型对象,而非它是否被这个构造函数调用过。这意味着两个完全不同的构造函数,只要它们的prototype属性指向同一个对象,用它们分别创建出来的实例就属于同一个类;反过来,同一个构造函数如果中途被替换了prototype,前后创建的实例反而不再属于同一类。原型链的连接关系才是继承和类归属的唯一事实来源,构造函数只是访问和创建这条链的入口。

参考来源

《JavaScript权威指南(原书第6版)》第9章《类和模块》