这是什么意思,Javascript是一个基于原型的语言?

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

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


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

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

原型继承形式中,对象直接从其他对象继承 。 所有关于课程的业务都消失了。 如果你想要一个对象,你只需要写一个对象。 但是,代码重用仍然是一件有价值的事情,因此允许对象在层次结构中链接在一起。 在JavaScript中,每个对象都有一个到创建它的对象的秘密链接,形成一个链。 当一个对象被问及一个它没有的属性时,它的父对象将会被问到......不断向上链直到找到该属性或直到达到根对象。

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

优点

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

旁注: @Andrew Hedges说得很好,实际上有很多原型语言。 值得注意的是,这些其他的存在,但值得注意的是,他们都没有接近主流。 NewtonScript似乎在一段时间内有一些吸引力,但是随着它的平台而死。 还可以通过添加原型功能的方式扩展某些现代语言。


基于原型的语言不会区分类和对象:它只是具有对象。 基于原型的语言具有原型对象的概念,该对象用作从其获取新对象的初始属性的模板。 任何对象都可以在创建它时或在运行时指定它自己的属性。 另外, 任何对象都可以作为另一个对象的原型关联 ,从而允许第二个对象共享第一个对象的属性。


基于原型的编程是一种面向对象的编程风格,其中不存在类,并且通过克隆用作原型的现有对象来执行行为重用(或基于类的语言中的继承)。

链接地址: http://www.djcxy.com/p/40839.html

上一篇: What does it mean that Javascript is a prototype based language?

下一篇: Javascript automatic getter/setters (John Resig Book)