0

非常に単純な質問です。JavaScript「モジュール」を作成するこれらの方法に違いがあるかどうかはわかりません。誰かが私のためにそれを明確にしてくれることを願っています。

A)

var foo = function() {
    var bar = function() {
        console.log('test');
    };

    return {
        bar: bar
    };
};

B)

var foo = function() {
    function bar() {
        console.log('test');
    };

    return {
        bar: bar
    };
};

ハ)

var foo = function() {
    this.bar = function() {
        console.log('test');
    };

    return {    
        bar: this.bar
    };
};
4

4 に答える 4

1

最初は、関数式を実行するのを忘れていました。モジュールパターンはIEFEです。関数を作成するだけです。

最後の例はナンセンスです。プロパティをthis-に割り当てるときはコンストラクター関数のように見え、IEFEとして実行すると壊れます(そして、それを使用するとnew望ましくない効果があります。オブジェクトを返すときは役に立ちません)。

最初のスニペットと2番目のスニペットの違いについては、var functionName = function(){}とfunction functionName(){}を参照してください。モジュールパターンのコンテキストでは、関数宣言をお勧めします。

于 2013-03-21T11:31:32.313 に答える
1

A と B は本質的に同じですが、関数/変数の巻き上げのために A と B の間には非常に小さな違いがあります。理論的には、B では機能するが A では壊れるコードを記述できますが、実際には、そうするために変なコードを書いてください。

C は動作しますが、概念的に間違っています。this.funcName関数で使用するポイントは、コンストラクターとしてnew Thing()使用することです (.モジュールである実際の目的の。

于 2013-03-21T11:28:39.383 に答える
0

//Javascript Module Pattern
var person = (function() {
  var cname = 'CheapFlight';
  return {
   name: "Santosh Thakur",
   getAge: function() {
    return cname;
   },
   growOlder: function() {
    return cname + " Updated";
 }
 };
}());
person.cname = "New Company"
console.log(person.cname);
console.log(person.name);
console.log(person.getAge());
console.log(person.growOlder());

于 2017-04-17T07:59:54.303 に答える
-2

関数の前に接頭辞varを付けると、関数は「クラス」っぽくなります。これは、関数の多くのバージョンを作成できることを意味します。これはAに行きます

例えば:

  var hi = function()
  {
    var bye = function()
    {
        alert("bye");
    }   
    bye(); // this will call bye
    var something = new bye(); // this will create a new instance of bye();
  }

  var something = new hi();
  something();

Bは、関数内でbarを呼び出すことはできず、barを呼び出すことしかできないことを意味します。

Cは、そのスコープのためにバーと同じです

クラスっぽい:

var Dog = function( hair, type )
{
     this.hair = hair;
     this.type = type;
}

var fred = new Dog( "long", "Dalmation" );
alert( fred.hair );    

var dave = new Dog( "short", "Poodle" );
alert( dave.type);

これはクラスです^

于 2013-03-21T11:08:24.110 に答える