問題タブ [module-pattern]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - Javascriptモジュールパターンと新しいキーワード
モジュールパターンの基本と、プライベートメンバーを許可するためのクロージャーの使用について説明しますが、以下のコードがその機能を実行する理由を完全に飲み込むことはできません。
コンソール出力は
new
したがって、ここでキーワードを意図的に省略して、最初の呼び出しはmyCalc
Calculatorオブジェクトに設定されます。priv
値0で始まり、それが増分されてから、新しいpriv
値1が出力されます。
しかし、a)次の呼び出しでCalculator()
同じオブジェクトへの参照が返されるのはなぜですか(2番目の「1」で証明されています)。私はnew
ここで使用してそれを回避できることを知っていますが、なぜそうしなければならないのかわかりません。この関数は、オブジェクトリテラル構文を使用して、基本的に新しいオブジェクトを作成してから返すのではありませんか?priv
b)同じ関数スタックスペースを使用しているように見えるので(JSでそれを考えるのは正しい方法ですか?)、同じオブジェクトへの参照を返す前に、プロセスで変数をゼロにしないのはなぜですか??
編集:ずさんな/愚かな間違いを修正しました(後継者に感謝します)。これにより、new
キーワードを使用しなくても、新しい/別個の計算機オブジェクトが出力されるようになりました。これでa)とb)がクリアされます。結果として得られる質問は、「new
モジュールパターンコンストラクターの呼び出しで使用するかどうかは重要ですか。答えは、問題ではないと思います(?)」です。(Joseph:http://jsfiddleを参照してください。 net / MvMvy / 5 / ... instanceof演算子は、どちらの方法でもモジュールパターンでは機能しません。)
javascript - AMDで定義されたJavascriptモジュールをどのように拡張できますか?
最初に少し歴史がありますが、基本的にモジュールである多くのjavascriptファイルで構成されているエンジンがあります。これらのモジュールは、指定された名前空間の下にありますが、グローバルスコープに割り当てられた単一のクラスを返します。
エンジン自体はeラーニングコンテンツを表示するために使用され、それぞれの異なるeラーニングコースはわずかに異なるニーズを必要とします。そこでは、必要な機能に基づいてjavascriptファイルをページに含めます。(エントリページは1つだけです)。
AMD、require.js、r.jsに変更する価値があるかどうか、またはページに必要なすべてのものを含み、1つのスクリプトに最小化する現在のシステムを維持する方がよいかどうかを検討してきました。
AMDに行くことに関する私の最大の問題の1つは、クラスを簡単に拡張するのが難しいように思われることです。たとえば、元のクラスの動作をわずかに調整する必要がある場合があります。そのため、元のプロトタイプをコピーして元のクラスを拡張する別のスクリプトインクルードをページに追加し、applyでオーバーライドされている元の関数を実行してから、必要な追加コードを実行します。
元のファイルを適応させずにAMDモジュールを拡張できますか?それとも私は要点を見逃していて、私たちは現在行っていることにとどまるのが最善ですか?
javascript - javascriptモジュールパターン変数スコープ
私はjavascriptとモジュールパターンを学んでいますが、コードを間違えたため、このパターンについては正しいとはいえ、いくつかの概念が間違っていることがわかりました。私の基本的なコードは次のようなものです。
次に、ページが読み込まれ、コードが呼び出されたとき:
アラートを順番に表示します。
さすがに。しかし、コンテンツコンポーネントを次のように変更すると、次のようになります。
アラートを順番に出します。
したがって、引数としてモジュールに渡されなくても、カーテン変数にアクセスできることがわかります。各モジュールは自己完結型だと思いましたが、そうではないことを発見しました。とにかく、モジュールが必要な変数にのみアクセスできるようにすることはできますか?特に私の例には役立つでしょう、ありがとうダン。
javascript - javascriptでモジュールパターンを実装するときに自己実行を行う理由
JavaScriptでモジュールパターンを実装するときに、なぜ自己実行コードが必要なのか疑問に思っています。
次のコードは、典型的なモジュール パターンのサンプルです。
しかし、中括弧を閉じてこの関数を自己実行する必要がある理由がわかりません。
javascript - jQuery AJAXクロスモジュール通信(モジュールパターン)
最近、モジュールパターンを使用するようにjavascript/jqueryアプリケーションコードをリファクタリングしました。
2つのモジュールがあります。たとえばAとBです。
モジュールBには、jQuery AJAX JSONP呼び出し($ .ajax)を作成し、コールバックで応答を渡すパブリックメソッド(たとえば、Bmethod)が含まれています。
モジュールAの内部には、返された応答を処理するためのコールバック関数を使用したB.Bmethod()の呼び出しがあります。
モジュールBの定義は次のとおりです。
ここで、モジュールBのメソッド呼び出しを使用したモジュールAの定義を示します。
モジュールAをロードして、コードの実行を開始する方法は次のとおりです。
ここでの問題は、ChromeとFirefoxで動作が異なることです。Chromeでは、AJAX呼び出しはまったく実行されていません。リクエストは送信されません。ただし、Firefoxでは、要求が行われたことを確認し、応答を返すこともできますが、成功のコールバックを受け取りません。
このコードをすべてモジュールの外に置いて、1つのファイルに入れると、すべてが正しく機能しているように見えます。
私は多くの人(StackOverflowでも)がAJAX呼び出しでモジュールパターンをうまく使用しているのを見てきましたが、私が間違っていることを理解することができませんでした。
アイデア/解決策はありますか?
javascript - モジュールパターンを使用してJavaScriptでイベント委任を拡張する方法は?
JavaScriptでモジュールパターンを使用しています。イベントを処理するcontroller.jsというファイルがあります。問題は、サブモジュールを使用したいということです。しかし、イベントはcontroller.jsで処理されるため、サブモジュールでイベントが発生した場合、どのように処理しますか?view.jsなどの別のファイルから
呼び出されたカスタムイベントをディスパッチします。PAGE_DISPLAYED
このイベントはcontroller.jsによってリッスンされ、表示されたページに応じて、その特定のページに固有の追加のイベントハンドラーをバインドするなど、他のことを行います。サブモジュールを使用してこれを行う方法。
サンプルコード:
上記のコードとイベント委任を拡張するにはどうすればよいですか?または、コードアーキテクチャが制限を課していますか。
私はjQueryMobileを使用しており、イベントのディスパッチはPAGE_DISPLAYED
イベントをリッスンすることによって行われpagechange
ます。
ありがとう。
javascript - 実際の例でjavascriptモジュールパターンを使用する方法は?
JavaScript モジュール パターンを理解しようとしています。どのように見えるべきかの例を見てきましたが、使い方がわかりません。
たとえば、ここでいくつかのことが起こっています。
上記の例を次のように使用するにはどうすればよいですか。
クリック イベントをどこに追加し、変数を宣言addMessage
し、ajax 呼び出しで関数を追加しますか。関数を呼び出しaddMessage
ますか?すべてをラップする必要があり$(document).ready(function()
ますか?
誰かが私のためにこれに光を当てることができますか?
ありがとう
javascript - javascriptとモジュールパターンでwindow.setTimeoutを使用する方法
私はこの例を持っています:
inputClick()
このコードで3秒ごとにメソッドを呼び出す方法を誰かが説明できますか?
ありがとう
javascript - JAVASCRIPTモジュールパターンでプライベートフィールドメンバーと継承を定義する
以下のコードを使用して、モジュールパターンでプライベートメンバーフィールドを定義できます
このメソッドは問題なく機能しますが、この問題の問題は、新しいオブジェクトを作成するたびに、すべての関数のコピーが作成されてメモリにロードされることです(同じクラスのすべてのオブジェクトが同じ関数メモリを共有するJavaとは異なります)
私は以下の他の方法を使おうとしました:
ただし、このメソッドの問題は、明らかにobj1、obj2がプライベートフィールドの同じコピーを共有することです(したがって、事実上、それらは静的です)。では、オブジェクトに同じ関数のコピーを使用しながら、モジュールパターンでプライベートフィールドを定義する方法はありますか?
そして、上記の最初のメソッドを継承するには、最初に子クラス内にオブジェクトを作成してから、そのオブジェクトを返す必要があります。
しかし、これは事実上、baseClassのオブジェクトをchildClassでラップしているだけです。これを(1番目または2番目のメソッドに対して)実装して、protected、privateなどのメソッドで真のJava継承のように機能できるようにする他の方法はありますか?