8

根据我的经验,JavaScript 是这样做的:

  • 操作 DOM 或其他宿主对象
  • 添加事件处理程序
  • 做阿贾克斯

自从我开始研究原型继承以来,我想知道它在实践中是如何实际使用的。有哪些用例?

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

(我知道我的问题有很多答案——我只是想听听其中的一些来感受在 JavaScript 中使用继承的感觉)

4

5 回答 5

2

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

在 Javascript 中,如果你想用一个方法返回一个对象foo

return { 
  foo: function() { 
    alert('You called foo!'); 
  }
};

调用者可以将这些对象视为多态的——也就是说,他们可以调用foo而不用担心它是什么“类型”的对象。没有继承的必要。

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

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

于 2010-09-14T10:57:15.377 回答
1

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

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

JavaScript 继承模型允许您:

  • 即使在创建对象实例之后,也可以在代码中的任何位置扩展原型(对象定义)。
  • 扩展与其他实例分开的原型实例。
  • 使用新功能扩展所有内置对象。

这类似于 ruby​​ 的类和 mixin 特性,并开辟了大量新的设计和继承模式,其中只有少数被发明或记录在案。

jquery 是成熟 javascript 库的最佳示例。链接文本 原型和脚本是其他的。

于 2010-09-14T10:44:45.827 回答
1

Douglas Crockford 有一些关于各种继承的有趣文章:

http://javascript.crockford.com/inheritance.html

http://javascript.crockford.com/prototypal.html

http://javascript.crockford.com/private.html

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

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

于 2010-09-15T07:19:10.043 回答
0

你应该看看任何大型库的代码,比如 jQuery——它在这些库中被广泛使用。

于 2010-09-13T19:15:02.460 回答
0

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

Ext 是一个库,包含许多可以以各种方式使用的可配置对象。大多数对象被概括为抽象类。给它看看。

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

我以前玩过原型继承,并且在我的全职工作中很少使用它。了解它是很有用的,并且很好地理解它,但是我每天都没有太多的用例。

于 2010-10-05T19:15:27.427 回答