В какой библиотеке JavaScript имеется самая полная поддержка наследования классов?

После игры с дюжиной различных библиотек JavaScript, таких как Prototype, jQuery, YUI, просто для того, чтобы назвать несколько, я обнаружил, что каждая другая библиотека имеет другой способ моделирования какой-то иерархии классов и предоставляет некоторую поддержку класса наследования. (За исключением jQuery) Кроме того, что очень раздражает то, что при создании нового класса он должен быть зависимым от библиотеки, если только вы не выполняете простой старый способ.

Мне интересно, какая библиотека предлагает лучшую поддержку для наследования классов вообще и почему.

Надеюсь, что однажды авторы JavaScript-библиотеки могут договориться о одном стиле создания и наследования классов.

Ответ 1

Я думаю, что 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

Я узнал, что есть Javascript Framework, смоделированный после Ruby:

Js.Class

Другим хорошим является:

Joose-js (смоделированный после лося (perl))

Я предпочитаю Josse, потому что он, кажется, более активно развивается, а синтаксис тоже выглядит аккуратно!

Любые мысли??? (Может быть, это должен быть другой вопрос?)

Ответ 3

Вы должны попробовать Classy:

http://classy.pocoo.org/

Это просто и очень мало, но есть все, что мне нужно при построении моих классов.

Ответ 4

Отъезд 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!"

Ответ 5

Base2 имеет простой механизм наследования, см. John Resig сообщение об этом (комментарии в сообщении также интересны).

Что-то, о чем нужно помнить, также состоит в том, что попытка моделирования синтаксиса классического OO в Javascript в последнее время много ломает (хотя он был очень восторженно изучен в первые дни великой революции библиотеки JS).

Ответ 6

Вы также можете быть заинтересованы в qooxdoo, платформе для создания богатых интернет-приложений (RIA). Он включает в себя всеобъемлющий слой OO, который направлен на то, чтобы быть мощным, элегантным и быстрым:

См. следующий раздел руководства, в котором указаны все детали: http://qooxdoo.org/documentation/0.8#object_orientation

Ответ 7

Я нахожу mootools, чтобы быть всем, что мне нужно для наследования. Он использует основной мотив расширений и инструментов многих других языков OO.

Один из разработчиков подробно рассматривает его в сравнении с jquery:

http://jqueryvsmootools.com

Вам также не нужна вся библиотека. Вы можете просто загрузить свою модель класса и игнорировать остальные (анимация, манипуляция с домом и т.д.).

Ответ 8

Просто выберите тот, который вам "нравится". В конце концов, все они используют прототипное наследование за кулисами, поэтому все они имеют примерно одинаковый уровень функциональности.

Если вы хотите мощную традиционную систему классов, используйте GWT и программу в чистой Java.

Лично я предпочитаю систему компонентов Ext, но потому, что компоненты Ext фактически имеют полный жизненный цикл (инициализация, рендеринг, сохранение состояния и уничтожение), который, в свою очередь, позволяет плагинам компонентов, которые не ломаются с небольшими обновлениями в библиотеке.

Ответ 9

Ну, сначала вы должны спросить, хотите ли вы библиотеку, которая пытается подражать классическому наследованию или та, которая больше подходит для собственного прототипного наследования JS.

DUI (библиотека пользовательского интерфейса Digg) - это аддон jQuery, который использует старую модель Prototype и расширяет ее более интуитивно понятным способом, позволяя вложенным статическим и динамическим классам, пространствам имен, поддержке бит dontEnum и т.д. Документация доступна на Digg GitHub. Я думаю, вы найдете его довольно надежным.

Раскрытие: я работаю для Digg и написал DUI;)