0

匿名スコープ内でJavascriptオブジェクトを使用する方法は2つあります。

(function(){

    function MyObject() {
        this.MyMethod = function() {
            //code here
        }
    }

    first = new MyObject();
    first.MyMethod();
})();

(function(){

    function MyObject(){}; 

    MyObject.prototype.MyMethod = function() {
        //code here
    }

    first = new MyObject();
    first.MyMethod();
})();

プロトタイプバージョンの方が優れていることは承知していますが、匿名スコープを使用することでメリット/デメリットが変わるかどうかはわかりません。

4

3 に答える 3

1

匿名スコープで使用しても違いはありません。

利点は、グローバルスコープで使用する場合と同じです。

MyObjectを非常に頻繁にインスタンス化する場合、「プロトタイプ」バージョンは各インスタンスでメソッドを複製することを回避し、リソース(メモリ)の浪費を回避します。

MyObjectを1回または2回インスタンス化する場合、グローバルスコープの場合のように即時関数に違いはありません。

于 2013-01-16T09:28:15.053 に答える
1

この場合、それらはほとんど同等だと思います。両方とも、外部の無名関数が実行されるたびに解釈されます。

中の1つだけを呼び出す限りnew MyObject()、それは問題ではありません。ただし、複数回呼び出す場合は、プロトタイプバージョンの方が適しています。

于 2013-01-16T09:22:12.103 に答える
1

違いはないと思います。IIFE(即時呼び出し関数式)は、変数がグローバルスコープにリークするのを防ぐためのものです。

どちらMyObjectもコンストラクターですが、最初のコンストラクターには、そのインスタンスの一意のプロパティとしての機能があります(呼び出し時に複製されますnew)。2番目の例では、そのコンストラクター関数のプロトタイプにメソッドを追加して、すべてのインスタンスで使用できるようにします。そのため、2番目の例ではAFAIKが推奨されます。

于 2013-01-16T09:23:34.093 に答える