0

私はJSモジュールを書く次の方法の間で決定しようとしています。メモリとCPUにモジュールを書き込むことの意味は何ですか。2番目のものはブラウザでより多くのメモリを消費しますか?

関数宣言の使用

function MyModule () {
    this.getOperation1 =  operation1;
    function operation1() {
        return "XYZ"
    }
}

変数定義の使用

 var MyModule = {
     getOperation1: function() {
        return "XYZ"
     }
  }
4

2 に答える 2

1

メモリ関連の議論については、このyui-blogを参照してください

同じから

newを使用して関数を呼び出すことにより、オブジェクトは価値のないプロトタイプオブジェクトを保持します。これは、オフセットの利点なしにメモリを浪費します。新しいものを使用しない場合、無駄なプロトタイプオブジェクトをチェーンに保持しません

@Alnitakで述べたように、すべてのインスタンスが同じオブジェクトを共有するように関数prototypeを実装する場合は、オブジェクトを利用してください。constructor

CPUごとの[速度]を確認するには、www.jsperf.comを使用してパフォーマンステストを実行します。すでに利用可能ないくつかのテスト 関数の呼び出しObject.createとnewGeneric

于 2012-05-22T12:44:52.597 に答える
1

メモリに関してはほぼ同じです。どちらも単一のオブジェクトを作成します。

でも:

  1. new関数ベースのモジュール形式でのみ使用できます。後者は、追加のインスタンスを作成するために使用できるコンストラクターではなく、単一のオブジェクトを作成するだけです。

  2. 関数を使用すると、プライベート ローカル変数をスコープに含めることができます。

ただし、ほとんどの場合、より良いアプローチは次のとおりです。

function MyModule () {
}

MyModule.prototype.getOperation1 = function() {
    ...
}

これにより、複数のインスタンスを作成した場合、すべてのインスタンスが関数の1 つのコピーのみを共有することが保証されgetOperation1ます。

とは言っても、関数の名前空間を作成するだけで、(OOP の意味で) 「オブジェクト」を自然に形成しない場合は、オブジェクト リテラル構文を使用することもできます。

于 2012-05-22T12:32:43.437 に答える