6

これはどのように行われますか:

var obj = obj || {};

obj.Something = (function() {

    function Something() {

    };

    Something.prototype.someMethod = function() {

    };

    return Something;

})();

これとは異なります:

obj.Something = function() {

};

obj.Something.prototype = {

};

パターンはどのように異なりますか?いつどちらを使用するのですか?

4

3 に答える 3

8

教師が推奨する方法を使用する主な理由は、グローバル スコープでは公開されない他の変数や関数を定義できるからです。

例えば ​​:

obj.Something = (function() {
    var sum = 0;
    function Something() {
    };
    Something.increment = function(){ sum++ };
    Something.getSum = function(){ return sum };    
    return Something;
})();

ここでsumは公開されておらず、グローバル名前空間を汚染していません。

それ以外は、両方のパターンはかなり似ています。しかし、IIFE パターンに慣れるのは良い考えです。特に、 IIFE パターンを適用するだけでなく、なぜそれが役立つのかを理解しようとする場合はなおさらです。

于 2013-05-14T19:29:40.347 に答える
1

彼の例では、彼はほぼ閉鎖を行いました。あなたはそれについて読むべきです。そこにある自己呼び出し関数のコンテキストに変数があれば、クロージャがあります。

また、先生の例では、何かがそのプロトタイプに関数を持っていることに注意してください。あなたの例では、Something のプロトタイプを空のプロトタイプに置き換えて消去しました。

于 2013-05-14T19:30:31.463 に答える
1

彼はOOPアプローチの後にモデリングしていると思います。彼の構文はクラス定義に似ており、彼の言葉によれば、より「使いやすく」なっている可能性があります。

于 2013-05-14T19:28:50.550 に答える