20

Prototype、jQuery、YUI など、数十種類の JavaScript ライブラリを試してみたところ、ライブラリごとに、ある種のクラス階層をシミュレートし、ある種のクラス継承サポートを提供する方法が異なることがわかりました。(jQuery以外)新しいクラスを作成するときに、昔ながらの方法を使用しない限り、ライブラリに依存する必要があることに非常に腹を立てることを除けば。

一般的に、どのライブラリがクラスの継承に最適なサポートを提供しているか、またその理由を知りたいと思っています。

いつの日か、JavaScript ライブラリの作成者が、クラスの作成と継承について 1 つのスタイルに同意できることを願っています。

4

9 に答える 9

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();
于 2009-04-02T19:24:47.523 に答える
7

Classy を試す必要があります。

http://classy.pocoo.org/

シンプルで非常に小さいですが、クラスを構築するときに必要なものがすべて揃っています。

于 2010-07-27T19:15:53.317 に答える
5

プロトタイプをチェックしてください。サンプルは次のとおりです。

// 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!"
于 2009-04-02T19:35:07.263 に答える
5

Base2には単純な継承メカニズムがあります。これについては、John Resig の投稿を参照してください (投稿内のコメントも興味深いものです)。

また、心に留めておくべきことは、Javascript で古典的な OO をシミュレートしようとする試みが、最近多くの批判を受けていることです (ただし、JS ライブラリの偉大な革命の初期には非常に熱心に調査されていました)。

于 2009-04-02T19:55:57.667 に答える
2

リッチ インターネット アプリケーション (RIA) を作成するためのフレームワークである qooxdoo にも興味があるかもしれません。これには、強力でエレガント、そして高速であることを目的とした包括的な OO レイヤーが含まれています。

詳細については、マニュアルの次のセクションを参照してください。 http://qooxdoo.org/documentation/0.8#object_orientation

于 2009-07-20T14:35:51.350 に答える
1

mootoolsは継承に必要なものすべてだと思います他の多くの OO 言語の Extends と Implements の基本的なモチーフを使用します。

開発者の 1 人が、jquery との比較で詳しく説明しています。

http://jqueryvsmootools.com

ライブラリ全体も必要ありません。Class モデルをダウンロードするだけで、残り (アニメーション、dom 操作など) を無視できます。

于 2009-07-20T14:39:49.630 に答える
1

あなたにとって一番「おいしい」ものを選んでください。最終的に、それらはすべて舞台裏でプロトタイプの継承を使用するため、ほぼ同じレベルの機能を備えています。

強力な従来のクラス システムが必要な場合は、GWT を使用し、純粋な Java でプログラムします。

個人的には Ext のコンポーネント システムの方が好きですが、それは Ext コンポーネントが実際には完全なライフサイクル(初期化、レンダリング、状態の永続化、破棄) を持っているためです。これにより、ライブラリのマイナー アップデートで壊れないコンポーネント プラグインが可能になります。

于 2010-07-27T21:15:16.467 に答える
0

まず、古典的な継承をエミュレートしようとするライブラリが必要なのか、それとも JS のネイティブ プロトタイプ継承に適したライブラリが必要なのかを尋ねる必要があります。

DUI (Digg User Interface ライブラリ) は、Prototype の古いモデルをより直感的な方法で拡張する jQuery アドオンであり、ネストされた静的および動的クラス、名前空間、dontEnum ビットのサポートなどを可能にします。ドキュメントは、Digg の GitHubで入手できます。かなり頑丈だと思います。

開示: 私は Digg で働いており、DUI を書きました ;)

于 2009-04-03T00:04:10.130 に答える