你不知道的JS系列上( 50 ) - JS中那些骗人的术语
在 JS 中,我们并不会将一个对象(类)复制到另一个对象(实例),只是将它们关联起来,[[Prototype]] 机制如下图所示
这个机制通常被称为 原型继承,这个名称主要是为了对应面向类的世界中继承的意义,但是推翻了动态脚本中对应的语义
继承这个词会让人产生非常强的心理预期。仅仅在前面加个原型并不能区分 js 中和类继承几乎完全相反的行为
因此我认为这个容易混淆的组合术语 “原型继承”。以及其他面向类的术语比如类,构造函数,实例,多态,等等严重影响了大家对于 js 机制真实原理的理解
继承意味着复制操作,JS 并不会复制对象属性。相反,JS 会在两个对象之间创建一个关联,这样一个对象可以通过委托访问另一个对象的属性和函数。
还有个偶尔会用到的术语 差异继承。基本原则是在描述对象行为时,使用其不同于普遍描述的特质。举例来说,描述汽车时你会说汽车是有四个轮子的一种交通工具,但是你不会重复描述交通工具具备的通用特性,比如引擎
默认情况下,对象并不会像差异继承暗示的那样通过复制生成。因此,差异继承也不适合用来描述 JS 的 [[Prototype]] 机制