0

以下の関数のインスタンスを 1 つだけ作成することがわかっている場合、MyClass以下の 2 つのスニペットのうち、どちらを優先しますか? 関数のインスタンスを 1 つしか作成しないことがわかっていても、後者を使用する必要がありますか?

関数のすべてのインスタンスでメソッドを共有する場合、パフォーマンスの観点からこれが役立つことはわかっていprototypeますが、この場合はあなたの意見を聞きたいです。

var MyClass = (function () {

    var cls = function () { };

    cls.prototype = {

        init: function(data){

        }
    };

    return cls;
})();

var MyClass = (function () {

    var cls = function () { 

        this.init = function(data){

        }
    };

    return cls;
})();
4

1 に答える 1

1

2 番目のコード スニペットは構文エラーです。ステートメントが必要な場所にプロパティ初期化子を配置しようとしています。 (もう違います)

init関数が必要なオブジェクトが 1 つだけの場合は、次のようになります。

var MyObject = {
    init: function(data) {
        // ...
    }
};

次に、それを作成するために関数を呼び出す必要さえありません。それはすでにそこにあります。

本当にプライベートな変数などが必要な場合 (これが外部の匿名関数の理由だと思います)、次のようにします。

var MyObject = (function() {
    var trulyPrivateDataHere;

    return {
        init: function(data) {
            // ...
        }
    };
})();

明確で直接的であるため、私はこれを好みます。実際のオブジェクトを作成しています。単一のインスタンスのみを作成する場合は、コンストラクター関数は必要ありません。

しかし、それコンストラクター関数でなければならない場合、私はあなたの2番目のオプションをわずかに好むと思います。

于 2013-03-30T12:07:28.850 に答える