4

後でインスタンス化できるクラスを定義するにはどうすればよいですか?

jquery を使用して、次のような回転子クラスを作成しました。

var Rotator =
{
Loop: null,

init: function(identifierName)
    {
    ........
    }
}

ページに 1 つの回転子を配置したい場合は、それで十分です。電話するだけRotator.init()で準備完了です。ただし、3 つのローテーターが必要な場合は、名前を変更するクラス コード全体を 3 回定義する必要があります。

私ができるなら、それはずっと簡単だろう

  Instance1 = new rotator;
  Instance2 = new rotator;
  Instance3 = new rotator;
4

2 に答える 2

3

以下は、複数回インスタンス化できる再利用可能な名前付き関数としてオブジェクト リテラルがどのように見えるかを示しています。

var Rotator = function(name) {
    this.Name = name;
    this.Loop = null;

    this.init = function(identifierName)
    {
        this.Name = identifierName;
    };
};

// usage:

var foorotator = new Rotator('foo');
var barrotator = new Rotator('bar');

alert(foorotator.Name);
alert(barrotator.Name);

http://jsfiddle.net/JzWCL/

編集後:

http://jsfiddle.net/mPzsq/

于 2013-03-29T18:10:47.477 に答える
2

Xander のソリューションは、1 回だけ使用されるクラスのようなオブジェクトの許容される形式のように見えます。ただし、サブクラス化または複数インスタンス化を計画している場合は、メソッドをメイン クラス (コンストラクター) 関数内で定義するのではなく、プロトタイプに適用する必要があります。例えば:

var Rotator = function(name) {
    //run your initialization logic inside this constructor function
    this.Name = name;
    this.Loop = null;
}

Rotator.prototype.someMethod = function() {
    //method code
}

var rotator1 = new Rotator('foo');
var rotator2 = new Rotator('bar');

この構造を使用する理由は、クラスがインスタンス化されるたびにメソッドが再構築されるのを防ぐためです。メソッドをプロトタイプに適用すると、クラスのすべてのインスタンス間でメソッドが共有されます。

JavaScript クラス定義のいくつかの基本については、これが役立つリファレンスであることがわかりました: JavaScript クラス を定義する 3 つの方法

于 2013-03-29T18:27:29.937 に答える