当前位置:  开发笔记 > 编程语言 > 正文

Javascript是基于原型的语言是什么意思?

如何解决《Javascript是基于原型的语言是什么意思?》经验,为你挑选了6个好方法。

据说Javascript的一个主要优点是它是一种基于原型的语言.

但是,Javascript基于原型是什么意思,为什么这是一个优势呢?



1> keparo..:

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

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

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

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

好处

关于为什么原型继承是代码重用的有利形式,可能没有硬性规定.代码重用本身是有利的,原型继承是一种合理的方式来实现它.您可能会争辩说,原型继承是一种相当简单的代码重用模型,并且该代码可以直接重复使用.但是古典语言当然也能够实现这一目标.

旁注: @Andrew Hedges提出了一个很好的观点,即实际上有许多原型语言.值得注意的是,其他这些存在,但也值得注意的是,它们都没有接近主流.NewtonScript似乎有一段时间的牵引力,但死于其​​平台.也可以通过添加原型功能的方式扩展一些现代语言.


嘿凯利 尽管JavaScript是迄今为止**最流行的原型语言,但还有许多其他语言:http://en.wikipedia.org/wiki/Prototype-based_programming#Languages
请阅读此内容https://developer.mozilla.org/en/JavaScript/Guide/Details_of_the_Object_Model
@PrisonerZERO:我认为原型继承比经典继承更直接.而不是对象B指向从对象A指向的类继承的类,它直接指向对象A并且说"我就像那个对象,除了......".关于原型继承的重要事情,以及对大多数人来说最难以内化的事情,是它不区分实例和类型.每个对象都是*类型和实例.两者之间的区别是人为的和刻意的,通常是陷入阶级导向思维模式的症状.
嘿安德鲁.好点子.我应该更清楚.我会记下它.

2> Guido..:

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


一个非常好的解释,但有点误导"关于初始属性的模板"的评论.如果更改原型AFTER实例化对象,该对象仍然会接收这些功能.

3> CMS..:

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



4> questzen..:

优点/缺点是,我们可以在运行时创建新类型的对象,而无需定义类(静态代码).像大多数功能一样,开发人员可以将其变为优势/劣势.

上面是可能的,因为对象本质上是java脚本中的函数(闭包).


类不一定是静态代码 - 看看Python,其中类是对象本身,并且是由元类构造的,元类也是对象.

5> Greg..:

您可以创建相同类型的对象,而不是声明类结构,并在您喜欢使用对象的原型时添加到它们的定义中.它比正常的做事方式更灵活.



6> artificialid..:

如果您只是在运行时使用对象而不是在编译时使用类来构建新对象,则可以在不知道任何有关它的详细信息的情况下扩展对象.当然,根据使用情况,它可能会很快变得不利.我对这里的语言没有任何假设,因此它适用于除了javascript之外的语言,它们不是动态的.

myobject.prototype=unkownobject;
myobject.newproperty=1;

你可以从任何地方获得物体; 您自己的代码,来自网络,来自数据库,来自外部链接等.

请注意,语言不必像javascript那样实现原型继承.在javascript中,原型对象只是在继承者之间共享,它的属性也是如此.另一种方法是将原型的所有属性复制到新对象.每种方法在不同情况下都有其优势.我喜欢第二个,但它不是javascript的功能.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有