在尝试了诸如Prototype、jQuery、YUI等十几个不同的JavaScript库之后,我发现每个库都有不同的方式来模拟某种类层次结构并提供某种类继承支持。(除了jQuery)除了非常烦恼创建新类时需要依赖于特定库,否则只能使用传统的方式。
我想知道哪个库通常提供最好的类继承支持以及原因。
我希望也许有一天JavaScript库的作者可以就类创建和继承达成一致的风格。
在尝试了诸如Prototype、jQuery、YUI等十几个不同的JavaScript库之后,我发现每个库都有不同的方式来模拟某种类层次结构并提供某种类继承支持。(除了jQuery)除了非常烦恼创建新类时需要依赖于特定库,否则只能使用传统的方式。
我想知道哪个库通常提供最好的类继承支持以及原因。
我希望也许有一天JavaScript库的作者可以就类创建和继承达成一致的风格。
我认为Microsoft Ajax 完美地实现了它(使用命名空间、继承和接口等)。
Type.registerNamespace("Demo");
Demo.Person = function(firstName, lastName, emailAddress) {
this._firstName = firstName;
this._lastName = lastName;
this._emailAddress = emailAddress;
}
Demo.Person.prototype = {
getFirstName: function() {
return this._firstName;
},
getLastName: function() {
return this._lastName;
},
getName: function() {
return this._firstName + ' ' + this._lastName;
},
dispose: function() {
alert('bye ' + this.getName());
}
}
Demo.Person.registerClass('Demo.Person', null, Sys.IDisposable);
// Notify ScriptManager that this is the end of the script.
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
请查看Prototype。这是一个示例:
// properties are directly passed to `create` method
var Person = Class.create({
initialize: function(name) {
this.name = name;
},
say: function(message) {
return this.name + ': ' + message;
}
});
// when subclassing, specify the class you want to inherit from
var Pirate = Class.create(Person, {
// redefine the speak method
say: function($super, message) {
return $super(message) + ', yarr!';
}
});
var john = new Pirate('Long John');
john.say('ahoy matey');
// -> "Long John: ahoy matey, yarr!"
您可能也对qooxdoo感兴趣,它是一种用于创建富互联网应用程序(RIAs)的框架。 它包括一个全面的OO层,旨在强大,优雅和快速:
请参见手册中的以下部分,其中包含所有细节: http://qooxdoo.org/documentation/0.8#object_orientation
我发现mootools对于继承来说是我所需要的一切。它使用了许多其他面向对象语言中的基本Extends和Implements主题。
其中一位开发者详细比较了它与jquery:
你也不需要整个库。你可以只下载他们的类模型,忽略其他部分(动画、DOM 操作等)。
只需选择你觉得最好的那个。归根结底,它们都在幕后使用原型继承,所以它们的功能水平大致相同。
如果你想要一个功能强大的传统类系统,可以使用GWT并纯粹地使用Java编程。
就个人而言,我更喜欢Ext的组件系统,因为Ext组件实际上具有完整的生命周期(初始化、渲染、状态持久化和销毁),这反过来允许组件插件不会因库的小更新而中断。
嗯,首先你应该问自己是否想要一个试图模拟经典继承的库,还是更倾向于JS的原生原型继承。
DUI(Digg用户界面库)是一个jQuery插件,它采用了Prototype的旧模型,并以一种更直观的方式进行了扩展,允许嵌套静态和动态类、命名空间、支持dontEnum位等。文档可在Digg's GitHub上找到。我认为你会发现它非常强大稳定。
声明:我在Digg工作并编写了DUI ;)