0

このメソッド構造/呼び出しの違いは何ですか?
メソッド構造が異なることがよくありますが、それぞれの利点が理解できません。

var obj = {
    some_method: function(){
        return 'This works';
    }
}

var Obj2 = function(){
    return {
        some_method: function(){
            return 'This works too';
        }
    }
}

console.log(obj.some_method());

var obj3 = new Obj2();
console.log(obj3.some_method());

両方とも本来あるべきものを返します。これはJsFiddleですが、どのような場合にそれぞれを使用する必要がありますか?

4

2 に答える 2

1

最初のものはsingletonに似ています。つまり、同じタイプの複数のオブジェクトを持つことはできませんが、状態は異なります。アプリケーション全体で実際の動物を複数ではなく 1 つしか持てないように。

より実用的な例として、このページを検討してください。複数Postの があり、それぞれに独自の状態があります (何Commentを持っているか、どんなテキストを持っているか、現在編集中かなど)。その場合var post =、それは投稿が 1 つしかないことを意味します。そのシングルトンで複数の投稿を操作するためのアドホックjQueryがおそらくあると思いますが、とにかく問題のオブジェクト指向モデリングを行っていません。


2 つ目は、コンストラクター関数を正しく使用していないため、作成されたオブジェクトはObj2butのインスタンスにはなりませんObject。次のようなコンストラクタを使用します。

function Obj2() {
   //initialize fields here
}

Obj2.prototype.someMethod = function(arg) {
     return this.state + arg;
};

コンストラクターでオブジェクト リテラルを返す理由は、コンストラクターが任意の型のオブジェクトを返すことができるためです。しかし、s を返すだけのコンストラクタを作るのは意味がありませんObject

通常、Object関連する静的機能を一緒にグループ化する場合 (動作、ただし長時間のデータはなし)、または辞書/マップ/連想配列 (データはあるが動作はなし) としてのみ s が必要です。

于 2013-08-07T12:52:04.317 に答える
0

最初のコードでは、 を呼び出してobj.some_method()います。some_methodのプロパティとしてネストされた関数ですobj。このパターンは、名前空間の 1 つの方法です。

Obj22 番目のケースでは、コンストラクターとして使用してオブジェクトを作成しています。ただし、 のインスタンスを返す代わりにObj2、前の例の と同じ構造を持つオブジェクトを返しましたobj。これは、コードが行っていないそれ自体のインスタンスを返す必要があるため、instanceofテストから誤った結果が得られます。new Obj2

于 2013-08-07T12:53:29.877 に答える