javascript - Javascript 是一种基于原型(prototype)的语言是什么意思?

标签 javascript oop inheritance prototype-programming

据说 Javascript 的主要优势之一是它是一种基于原型(prototype)的语言。

但是 Javascript 是基于原型(prototype)的意味着什么,为什么这是一个优势?

最佳答案

原型(prototype)继承是一种面向对象的代码重用。 Javascript 是唯一使用原型(prototype)继承的 [主流] 面向对象语言之一。几乎所有其他面向对象的语言都是经典的。

经典继承中,程序员编写一个定义对象的类。多个对象可以从同一个类中实例化,因此您可以在一个地方拥有描述程序中多个对象的代码。然后可以将类组织成层次结构,从而促进代码重用。更通用的代码存储在较高级别的类中,较低级别的类从该类继承。这意味着一个对象与同一类的其他对象及其父类共享代码。

原型(prototype)继承形式中,对象直接继承其他对象。所有关于类(class)的事情都消失了。如果你想要一个对象,你只需写一个对象。但是代码重用仍然是一件有值(value)的事情,因此允许对象在层次结构中链接在一起。在 javascript 中,每个对象都有一个指向创建它的对象的 secret 链接,形成一个链。当一个对象被要求提供一个它没有的属性时,它的父对象将被要求...不断地向上链直到找到该属性或直到到达根对象。

JavaScript 中的每个函数(它们本身就是对象)实际上都有一个名为“prototype”的成员,该成员负责在请求对象时提供值。拥有这个成员允许构造器机制(通过它从函数构造对象)工作。将属性添加到函数对象的原型(prototype)将使其可用于构造的对象,以及从它继承的所有对象。

优势

对于为什么原型(prototype)继承是代码重用的一种有利形式,可能没有硬性规定。代码重用本身是有利的,原型(prototype)继承是一种明智的做法。您可能会争辩说,原型(prototype)继承是一种相当简单的代码重用模型,并且可以以直接方式大量重用代码。但古典语言当然也能做到这一点。

旁注: @Andrew Hedges 提出了一个很好的观点,实际上有 many原型(prototype)语言。值得注意的是,这些其他的存在,但也值得注意的是,它们都不是接近主流的东西。 NewtonScript 似乎有一段时间的吸引力,但随着它的平台而死。还可以通过添加原型(prototype)功能的方式扩展一些现代语言。

关于javascript - Javascript 是一种基于原型(prototype)的语言是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/186244/

相关文章:

javascript - 在 JavaScript 中按字体大小选择 DOM 节点

JavaScript - 尝试从原型(prototype)中添加原型(prototype)

c++ - 通过此指针调用 protected 基类方法并转换为派生类中的基类 (C++)

javascript - 仅当用户空闲 X 秒时如何使用鼠标事件进行 AJAX 调用

javascript - 使用嵌套对象进行 MongoDB 映射缩减

javascript - 如何使用 javascript 更改标签

java - 基于对象实例进行类型转换的正确方法

javascript - 如何将我的 Module-Singleton JavaScript 转换为支持实例?

c++ - 虚函数和双重继承

.net - 无法保存 Entity Framework 继承的类型