根据我的经验,JavaScript 是这样做的:
- 操作 DOM 或其他宿主对象
- 添加事件处理程序
- 做阿贾克斯
自从我开始研究原型继承以来,我想知道它在实践中是如何实际使用的。有哪些用例?
这里有人积极使用继承模式吗?做什么的?
(我知道我的问题有很多答案——我只是想听听其中的一些来感受在 JavaScript 中使用继承的感觉)
根据我的经验,JavaScript 是这样做的:
自从我开始研究原型继承以来,我想知道它在实践中是如何实际使用的。有哪些用例?
这里有人积极使用继承模式吗?做什么的?
(我知道我的问题有很多答案——我只是想听听其中的一些来感受在 JavaScript 中使用继承的感觉)
我使用 jQuery(以及之前的 JavaScript)的经验是,原型继承并不像我预期的那么有用。它有用途,但对语言来说并不重要。
在 Javascript 中,如果你想用一个方法返回一个对象foo
:
return {
foo: function() {
alert('You called foo!');
}
};
调用者可以将这些对象视为多态的——也就是说,他们可以调用foo
而不用担心它是什么“类型”的对象。没有继承的必要。
在这种背景下,原型只是一种优化。它们允许您创建大量对象,而无需在每个实例中复制大量函数属性。这就是 jQuery 在内部使用它的原因。一个 jQuery 对象有几十个函数,将它们复制到每个实例中可能会产生很大的开销。
但从 jQuery 用户的角度来看,原型并不是特别重要。它可以被重写为不使用它们,它仍然可以工作(但可能会使用更多的内存)。
随着越来越多的代码是专门为运行 iOS、Android 等的移动设备编写的,并且随着应用范式的成熟,越来越多的复杂性和逻辑转向在设备上运行的 javascript 库中。
javascript 的对象/继承模型为开发人员提供了一个非常灵活的工具包,用于开发动态和复杂的应用程序。
JavaScript 继承模型允许您:
这类似于 ruby 的类和 mixin 特性,并开辟了大量新的设计和继承模式,其中只有少数被发明或记录在案。
jquery 是成熟 javascript 库的最佳示例。链接文本 原型和脚本是其他的。
Douglas Crockford 有一些关于各种继承的有趣文章:
http://javascript.crockford.com/inheritance.html
http://javascript.crockford.com/prototypal.html
http://javascript.crockford.com/private.html
第一个是旧的,你可能不想那样做,但它显示了 JavaScript 的灵活性。第二个是他如何使用原型。如果您要在 JavaScript 中大量使用对象,最后一个会很有趣,并且它有点关于继承。
阅读它们(它们很短)可能不会给你想要的所有答案,但我怀疑它会让你以稍微不同的方式思考和看待 JavaScript。也就是说,克罗克福德对他的写作总是很有信心,但我认为你不应该把他的话当作法律。
你应该看看任何大型库的代码,比如 jQuery——它在这些库中被广泛使用。
我所知道的 JavaScript 中使用的最好的继承示例可能是 Ext 库。与 jQuery 相比,jQuery 主要是一个可以扩展自身的大对象,Ext 展示了一种更典型的继承方法,在应用面向对象范式的程序中可以找到。
Ext 是一个库,包含许多可以以各种方式使用的可配置对象。大多数对象被概括为抽象类。给它看看。
该工具已经存在了很长时间,但向 ajax 和更厚的客户端 Web 应用程序发展的趋势意味着它变得越来越普遍,尽管它通常打包在您正在使用的库中。
我以前玩过原型继承,并且在我的全职工作中很少使用它。了解它是很有用的,并且很好地理解它,但是我每天都没有太多的用例。