Javascript是一种基于原型的语言是什么意思?
Javascript的主要优势之一据说是它是一种基于原型的语言。
但是Javascript是基于原型的是什么意思,为什么这是一个优势呢?
Javascript的主要优势之一据说是它是一种基于原型的语言。
但是Javascript是基于原型的是什么意思,为什么这是一个优势呢?
原型继承是面向对象代码重用的一种形式。Javascript是唯一使用原型继承的面向对象语言之一。几乎所有其他面向对象的语言都是经典的。
在经典继承中,程序员编写一个类,该类定义一个对象。可以从同一类实例化多个对象,因此您可以在一个位置使用代码来描述程序中的多个对象。然后,可以将类组织到层次结构中,从而进一步重用代码。更通用的代码存储在较高级别的类中,较低级别的类从该类继承。这意味着对象正在与同一类的其他对象以及其父类共享代码。
在原型继承形式中,对象直接从其他对象继承。所有关于课程的业务都消失了。如果你想要一个对象,你只需编写一个对象。但是代码重用仍然是一件有价值的事情,因此允许对象在层次结构中链接在一起。在javascript中,每个对象都有一个秘密链接,指向创建它的对象,形成一个链。当要求对象提供它没有的属性时,将询问其父对象...不断向上移动链,直到找到属性或到达根对象。
JavaScript中的每个函数(本身就是对象)实际上都有一个名为“prototype”的成员,该成员负责在请求对象时提供值。具有此成员允许构造函数机制(通过该机制从函数构造对象)工作。将属性添加到函数对象的原型中将使它可用于构造的对象以及从它继承的所有对象。
优势
对于为什么原型继承是一种有利的代码重用形式,可能没有一个硬性规定。代码重用本身是有利的,原型继承是一种明智的方法。您可能会争辩说,原型继承是一个相当简单的代码重用模型,并且代码可以直接重现。但古典语言当然也能够做到这一点。
旁注:@Andrew Hedges提出了一个很好的观点,即实际上有许多原型语言。值得注意的是,这些其他人是存在的,但也值得注意的是,他们都不是接近主流的东西。NewtonScript似乎在一段时间内有一些牵引力,但随着它的平台而死亡。也可以以添加原型功能的方式扩展一些现代语言。
基于原型的语言,不会区分类与对象:它只是有对象。基于原型的语言具有原型对象的概念,该对象用作模板,从中获取新对象的初始属性。任何对象都可以在创建对象时或在运行时指定自己的属性。此外,任何对象都可以关联为另一个对象的原型,从而允许第二个对象共享第一个对象的属性。