你不知道的JS系列上( 50 ) - JS中那些骗人的术语

在 JS 中,我们并不会将一个对象(类)复制到另一个对象(实例),只是将它们关联起来,[[Prototype]] 机制如下图所示
 

 

 


这个机制通常被称为 原型继承,这个名称主要是为了对应面向类的世界中继承的意义,但是推翻了动态脚本中对应的语义

继承这个词会让人产生非常强的心理预期。仅仅在前面加个原型并不能区分 js 中和类继承几乎完全相反的行为

因此我认为这个容易混淆的组合术语 “原型继承”。以及其他面向类的术语比如类,构造函数,实例,多态,等等严重影响了大家对于 js 机制真实原理的理解

继承意味着复制操作,JS 并不会复制对象属性。相反,JS 会在两个对象之间创建一个关联,这样一个对象可以通过委托访问另一个对象的属性和函数。

还有个偶尔会用到的术语 差异继承。基本原则是在描述对象行为时,使用其不同于普遍描述的特质。举例来说,描述汽车时你会说汽车是有四个轮子的一种交通工具,但是你不会重复描述交通工具具备的通用特性,比如引擎

默认情况下,对象并不会像差异继承暗示的那样通过复制生成。因此,差异继承也不适合用来描述 JS 的 [[Prototype]] 机制
posted @ 2020-04-13 06:39  wzndkj  阅读(246)  评论(0编辑  收藏  举报