2

ここで参照されているJavaScriptモジュールパターンを学習しようとしています。すべてが素晴らしく見えますが、モジュールを作成するさまざまな方法を見続けています。

上記の記事で、彼はYAHOO.myProject.myModule.init();を呼び出さずにを使用してモジュールのパブリックメソッドにアクセスしますnew。しかし、それから私は何人かの人々がのようなことをするのを見ましたvar module = new YAHOO.myProject.myModule();new使用する必要があり、その理由は何ですか?

4

5 に答える 5

2

これには正しい答えも間違った答えもありません。

モジュールにオブジェクトが含まれている場合がありますが、新しいキーワードは必要ありません。

define( [], function() {
   return {
      foo: "bar"
   };
};

モジュールには、新しいキーワードが必要なオブジェクトのコンストラクターが含まれる場合があります。

define( [], function() {
   return function() {
      this.foo = "bar";
   };
};

モジュールには、新しいキーワードが不要な新しいオブジェクトを返す関数が含まれている場合があります。

define( [], function() {
   var SomeConstructor = function() {
      this.foo = "bar";
   };
   return function() {
      return new SomeConstructor();
   };
};

使用法は、部分的には達成しようとしていることと、部分的にはチームのコーディング設定に依存します。

于 2012-10-02T16:39:28.833 に答える
1

それはすべて、まさにその中身に帰着しmyModuleます。

の目的がmyModule100%の新しいオブジェクトを返すことであり、内部にmyModuleを使用した割り当てがたくさんある場合はthis.<X> = <Y>、そうnewです、予想される一連のアクションになります。

...新しいオブジェクトを作成することを検討していなかった場合は、this参照しmyProjectthis.<X> = <Y>;割り当てが反映されYAHOO.myProject.<X> = <Y>;、使用newすることは悪い考えYAHOO.myProject.<X>です。

だから、それは本当に何が起こっているかに依存します。

多くのJavaScriptに精通したプログラマー(C ++、Java、またはC#の記述とは異なる方法でJSについて考えることに慣れているプログラマー)は、このような場合に必要なパターンの使用を避けようとnewます。 JSで実装するのが非常に簡単な他の多くの適切なパターン。myModule

于 2012-10-02T16:21:00.283 に答える
0

モジュールは通常シングルトンであり、コンストラクターではないため、を使用しないでくださいnewこの回答も参照してください。

于 2012-10-02T16:14:50.350 に答える
0

newJavascriptのキーワードは、新しいオブジェクトを割り当ててthisから、コンストラクター呼び出しの場合と同じように設定します。関数自体に割り当てられたオブジェクトを返す関数としてモジュールを使用しているだけの場合は、new必要ありません。

于 2012-10-02T16:15:59.293 に答える
0

少なくとも宣言するとき、javascriptはオブジェクトと関数を区別しないため、オブジェクトを作成するときにnewを使用する必要があります。ただし、このようなパターンが発生することはよくあります。

function myObject() {
    if (!(this instanceof myObject)) {
        return new myObject();
    }
}

これは、常に。のインスタンスであることを確認するために行われますmyObject

于 2012-10-02T16:16:51.863 に答える