在JavaScript中使用继承模式

在JavaScript中使用继承模式,javascript,inheritance,use-case,Javascript,Inheritance,Use Case,根据我的经验,JavaScript可以做到以下几点: 操作DOM或其他主机对象 添加事件处理程序 做Ajax 自从我开始研究原型继承以来,我想知道它实际上是如何在实践中使用的。用例是什么 这里有人在积极使用继承模式吗?为什么 (我知道我的问题有很多答案-我只是想听听其中的一些,以了解在JavaScript中使用继承的感觉)您应该看看任何大型库的代码,与jQuery一样,它在这些应用程序中得到了广泛的应用。随着越来越多的代码专门为运行iOS、Android等的移动设备编写,并且随着应用程序范式

根据我的经验,JavaScript可以做到以下几点:

  • 操作DOM或其他主机对象
  • 添加事件处理程序
  • 做Ajax
自从我开始研究原型继承以来,我想知道它实际上是如何在实践中使用的。用例是什么

这里有人在积极使用继承模式吗?为什么


(我知道我的问题有很多答案-我只是想听听其中的一些,以了解在JavaScript中使用继承的感觉)

您应该看看任何大型库的代码,与jQuery一样,它在这些应用程序中得到了广泛的应用。

随着越来越多的代码专门为运行iOS、Android等的移动设备编写,并且随着应用程序范式的成熟,在设备上运行的javascript库中加入了越来越多的复杂性和逻辑性

javascript的对象/继承模型为开发人员提供了一个非常灵活的工具包,用于开发动态和复杂的应用程序

JavaScript继承模型允许您:

  • 将原型(对象定义)扩展到代码中的任何位置,即使在 对象已创建
  • 扩展与其他实例分离的原型实例
  • 使用新功能扩展所有内置对象
这类似于ruby的类和mixin特性,并打开了大量新的设计和继承模式,其中只有少数模式被发明或记录

jquery是成熟javascript库的最佳示例。
prototype和scriptaculus是其他的。

我使用jQuery(以及之前的JavaScript)的经验是,prototype继承没有我预期的那么有用。它有用途,但对语言来说根本不重要

在Javascript中,如果要使用方法
foo
返回对象:

return { 
  foo: function() { 
    alert('You called foo!'); 
  }
};
调用者可以将这些对象视为多态对象——也就是说,他们可以调用
foo
,而不必担心对象的“类型”。不需要继承

在这种背景下,原型仅仅是一种优化。它们允许您创建大量对象,而无需在每个实例中复制一大组函数属性。这就是jQuery在内部使用它的原因。一个jQuery对象有几十个函数,将它们复制到每个实例中可能会造成很大的开销


但从jQuery用户的角度来看,原型并不特别重要。它可以重写为不使用它们,并且仍然可以工作(但可能会占用更多内存)。

道格拉斯·克罗克福德(Douglas Crockford)有一些关于各种继承的有趣文章:

第一个是旧的,您可能不想这样做,但它显示了JavaScript的灵活性。第二个问题是他如何使用原型。如果您打算在JavaScript中大量使用对象,那么最后一个是很有趣的,它有一点关于继承


阅读它们(它们很短)可能不会给出你想要的所有答案,但我怀疑它会让你以稍微不同的方式思考和看待JavaScript。也就是说,Crockford在他的写作中总是非常自信,但我认为你不应该把他的话当作法律。

我所知道的JavaScript中使用的继承的最好例子可能是Ext库。与jQuery相比,Ext是一种更典型的继承方法,在应用面向对象范例的程序中可以找到,而jQuery主要是一个自身得到扩展的大对象

Ext是一个库,由许多可配置对象组成,这些对象可以以各种方式使用。大多数对象被泛化为抽象类。看一看

这个工具已经存在很长时间了,但是ajax和更厚的客户端web应用程序的趋势意味着它变得越来越普遍,尽管它通常打包在您正在使用的库中


我以前玩过原型继承,在我的全职工作中,我在一些工作中很少使用它。了解它是很有用的,了解它也是很好的,但是我每天都没有那么多的使用案例。

好的,据我所知,jQuery定义了一个包含很多方法的大型对象,然后这个对象被用作jQuery构造函数的原型,然后我们使用该构造函数动态创建对象,所有这些对象都可以使用来自另一个对象的方法,因为它们继承自该对象。对吧?如果他不知道cw是什么意思,他也不知道如何制作(我也不知道)。你为什么不告诉我?从我在谷歌上搜索到的,它与主观问题有关。。。