哪个JavaScript库具有最全面的类继承支持?

时间:2009-04-02 19:23:17

标签: javascript javascript-framework

在玩了十几个不同的JavaScript库,比如Prototype,jQuery,YUI之后,我发现每个不同的库都有不同的模拟某种类层次结构的方式,并提供某种类继承支持。 (除了jQuery之外)除了非常恼火,当你创建一个新类时,它必须依赖于库,除非你采用普通的方法。

我想知道哪个库提供了对类继承的最佳支持以及原因。

我希望有一天,JavaScript库作者可以就类创建和继承的一种风格达成一致。

9 个答案:

答案 0 :(得分:8)

我发现有一个以Ruby为模型的Javascript框架:

<强> Js.Class

另一个好处是:

Joose-js (模仿驼鹿(perl))

我更喜欢Josse ,因为它似乎更积极地开发,语法看起来也很整洁!

有什么想法??? (也许这应该是另一个问题??)

答案 1 :(得分:7)

我认为 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();

答案 2 :(得分:7)

你应该尝试Classy:

http://classy.pocoo.org/

这很简单,但很小,但在构建我的课程时我需要的一切。

答案 3 :(得分:5)

结帐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!"

答案 4 :(得分:5)

Base2具有简单的继承机制,请参阅John Resig的post(帖子中的评论也很有趣)。

还要记住的是,尝试在Javascript中模拟经典OO最近已经得到了很多抨击(尽管在JS库革命的最初时期,它已经非常热情地进行了探索)。

答案 5 :(得分:2)

您可能也对qooxdoo感兴趣,qooxdoo是一个用于创建富Internet应用程序(RIA)的框架。它包括一个全面的OO层,旨在强大,优雅和快速:

请参阅手册中的以下部分,其中包含所有详细信息: http://qooxdoo.org/documentation/0.8#object_orientation

答案 6 :(得分:1)

我发现mootools是继承所需要的一切。它使用了许多其他OO语言的Extends and Implements的基本主题。

其中一位开发人员在与jquery的比较中详细介绍了它:

http://jqueryvsmootools.com

您也不需要整个库。你可以下载他们的Class模型并忽略其余的(动画,dom操作等)。

答案 7 :(得分:1)

选择最适合自己的“品尝”。最后,他们都在幕后使用原型继承,因此它们都具有大致相同的功能级别。

如果您想要一个高性能的传统类系统,请使用GWT并使用纯Java编程。

我个人更喜欢Ext的组件系统,但那是因为Ext组件实际上有一个full lifecycle(初始化,渲染,状态持久性和破坏),这反过来允许组件插件不会因为次要更新而中断库。

答案 8 :(得分:0)

那么,首先你应该问一下你是想要一个试图模仿经典继承的库,还是想要一个更有利于JS原生原型继承的库。

DUI(Digg用户界面库)是一个jQuery插件,它采用Prototype的旧模型并以更直观的方式扩展它,允许嵌套的静态和动态类,命名空间,对dontEnum位的支持等等。文档可在Digg's GitHub上找到。我想你会发现它非常强大。

披露:我为Digg工作并编写了DUI;)