問題タブ [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 - re:jQuery; グローバルajaxイベントを非DOMオブジェクトにバインドする
ここでの基本的なモジュールの質問:モジュールパターンを放棄すると、グローバルハンドラーを正常に機能させることができますが、このテストコードは機能せず、理由を理解するのが非常に困難です。
インスタンスにアタッチされたハンドラーMyModule
は、ajax呼び出しの実行時に実行されることはありません。代わりにハンドラーをアタッチすると$(document)
問題なく動作しますが、なぜそのグローバルイベントがモジュールオブジェクトに正しくバインドされていないように見えるのか不思議です。
編集:これはさらに簡単な例です:
に置き換える$(x)
と、機能します...非DOMオブジェクト(または他のグローバルajaxイベント)に$(document)
バインドできないようです?ajaxStart
@ Nucleon、これは私には完全には正しくないようです。理由の例を次に示します。
ここで、(カスタム)イベント「foo」は2つのパターンを介してバインドされ、異なるトリガーメソッドはパターンの特異性を示します...「ロングハンド」アラートを2回、「ショートハンド」アラートを1回受け取ります。
これで、でグローバルイベントを発生させることもできます$.event.trigger("foo")
(ただし、同等のグローバルtriggerHandler
は存在しません)。問題は、このコードを最後に追加した場合です。
このグローバルイベントトリガーでは、どちらのハンドラーも実行されません。
ただし、item
上記で提案したように、いくつかのDOMタイプの要素に置き換えると、ローカルイベントとグローバルイベントの両方が処理されますが、「省略形」ハンドラーは機能しなくなるという警告があります*。したがって、ローカル処理は非DOMオブジェクトで機能しますが、特にグローバル処理では機能しないようです。
-m
*短縮パターンは非DOMオブジェクトにのみ適用されるため、短縮ハンドラーは機能を停止します。個人的には、非DOMオブジェクトのこの「省略形」の動作をjQueryから削除する必要があると思います。それについて知っている人はごくわずかであり、グローバルなjQueryオブジェクトページに1つのあいまいな文でしか文書化されていません...その動作は、人々がおそらく気づいていない拘束力のあるステップを暗黙的に実行するため、気づいていない人を狂わせる可能性がありますの。
ああ、わかりました...$.event.trigger
機能は公開されていませんが、基盤となるイベント起動メカニズムによって使用されています。私はそれを使うべきではないと思います。この動作は、jQuery開発者が正しく実装するのが困難であり、完全に放棄しているように見えます(または、「修正済み」とマークされたこのバグレポートから収集したものです:DEPRECATE AJAX "GLOBAL" EVENT BEHAVIOR)。
.trigger
ただし、次のアラートの1つだけが実行されるため、DOMオブジェクトまたは非DOMオブジェクトに対して同じように動作するものとして文書化されることについてはまだ少し混乱しています。
foo
これは、設定されたプロパティが実際には従来の意味での「適切な」JSプロパティではないことを意味していると思いdom
ます(コンソールでオブジェクトを検査するときに正しく表示されますが)?
注:これはすべて知識のためです。上記のバグリンクの「修正」のアドバイスを参考にして、すべてのAJAX(およびその他のグローバル)イベントをに添付するだけですdocument
。 jQuery1.9で強制される動作になります。しかし、私はすでに青いピルを飲んでいて、うさぎの穴から離れすぎて戻ってこないような気がします。
javascript - 外部からの RequireJS 設定モジュール変数が有効にならない
requireJS Define モジュール内で変数を設定するのに問題があります。フラットアウトは有効になりません。問題を説明するために、次の(カットダウン)例があります。
定義されたモジュールは次のとおりです。
「TesterModule」を別の依存関係として設定し、次のコード行を実行します。
コンソールに出力されるのは次のとおりです。
私はそれがあるべきだと思っていたでしょう:
variable = blah を実行するだけでモジュールに変数を設定しても効果がないようです。モジュールのメソッド内で変数を設定する必要があるようです。誰かが私にこれがなぜなのか説明できますか? または、私が間違ってコーディングしているものは何ですか?
前もって感謝します
javascript - JS モジュールのパターン = キャッシング / パフォーマンスの向上?
この記事http://javascriptweblog.wordpress.com/2011/05/31/a-fresh-look-at-javascript-mixins/を読みました。
「#4キャッシングの追加」というタイトルのセクションでは、次のように述べています。
ミックスインの周りにクロージャーを形成することで、最初の定義実行の結果をキャッシュでき、パフォーマンスへの影響は顕著です。
これがどのように機能するのか理解できません。ここでモジュール パターンを使用すると、コードの高速化/キャッシュ バージョンにどのようにつながるのでしょうか?
javascript - javascriptで条件付きでモジュールパターンの1つのインスタンスをインスタンス化する
モジュールを公開しようとしています。そのインスタンスを 1 つだけすべての呼び出し元に公開し、モジュールが呼び出されてインスタンス化されるまで待機したいと考えています。私はこれをやろうとしました:
しかし、実際にはそれは難読化にすぎません
私が意図していたのは、 が初めて呼び出されたobj.foobar = new foobar()
ときにインスタンス化することでした。2 回目は、既にインスタンス化されたバージョンを使用して呼び出されました。ここにはありませんが、インスタンス化を待機する必要があるため、すぐに実行できない依存関係があります。obj.foobar.GetId()
obj.foobar.GetId()
new foobar();
どうすればこれを達成できますか、何が欠けていましたか?
javascript - モジュールパターンとシングルトンパターンの違いは?
Module Pattern
一部のプロジェクトでは、代わりにを使用しSingleton Pattern
、その逆を使用することを見てきました。
Module Pattern
正確に知りたいのですが、とはどう違いSingleton Pattern
ますか?
javascript - JavaScriptモジュールパターンとコンストラクターでメソッドが定義されたコンストラクター
単一のインスタンスと複数のインスタンスの観点から、モジュール パターンに続く余分なコード行をすべて記述するのではなく、コンストラクター本体で定義されたメソッドとプロパティを持つ標準のコンストラクターを使用するのはなぜでしょうか?
モジュールパターンサンプル: http: //jsfiddle.net/T3ZJE/1/
コンストラクターのサンプル: http://jsfiddle.net/EuvaS/2/
私にとって、最終結果はほとんど同じです。どちらもパブリック プロパティとメソッドを持つことができ、パブリック メソッドによってアクセスできる「プライベート」変数とメソッドを持つことができます。
どちらも、シングルトンに対してパブリック/プロトタイプメソッドを1回定義し、オブジェクトの複数のインスタンス/クローンに対して複数回定義します。
何か不足していますか?違いはなんですか?
javascript - JavaScriptでのこれら3つのモジュールパターン実装の違いは何ですか?
JavaScriptモジュールパターンの例として、次の3つのコードブロックを見てきました。違いは何ですか?なぜ私は他のパターンよりも1つのパターンを選ぶのですか?
パターン1
パターン2
パターン3
私の知る限り、JavaScriptコミュニティは、一般的にパターン3が最適であることに賛成しているようです。最初の2つとどう違うのですか?3つのパターンすべてを使用して、変数と関数をカプセル化できるように思えます。
注:この投稿は実際には質問に答えていません。また、重複しているとは考えていません。
jquery - jQueryチュートリアルモジュールパターンの例を理解する
ラーニングセンターのコード編成セクションで公開されたモジュールパターンに関する最後のコードフラグメント(以下に報告)を考慮して、例のモジュールのいくつかの側面を理解しようとしています。
- 変数宣言(
$items
、$container
...)はで区切られ、;
関数宣言(createContainer
、、、、....)はで区切られます。なんで?ブラケットの問題はありますか?buildUrl
showItem
,
- 最初の3つの変数(、、および)の名前がで
$items
始まる$container
の$currentItem
は$
なぜですか?これは、DOMフラグメント変数を識別するために使用される命名規則(javascript
文字を許可する$
ため)を意味しますか、それとも他の理由がありますか? - 他の関数(、、 ...)が持っていないのに、なぜ関数はを使用して宣言され
createContainer
ているのですか?var
buildUrl
showItem
var
// jQuery機能のモジュールパターンを使用$(document).ready(function(){
javascript - Javascript revealing module pattern Noob
I'm starting Addy Osmani's amazing book on javascript design patterns but can't seem to get off the ground. Can anyone tell me what's wrong here with my approach (I'm using Raphael, just for fun.):
javascript - JS テンプレート メソッド パターンの this の意味
マークされた行が見つからないのはなぜprotectedACMember
ですか?
プライベート、保護、およびパブリック メンバーをシミュレートするための適切なパターンはありますか? 静的/非静的も?