0

私はjsデザインパターンに精通していません。そして今、私は問題に直面しました。皆さんが私を助けてくれることを願っています。よろしくお願いします。

コードはここにあります:http://jsfiddle.net/nNdna/ ライブページはここにあります:http ://www.sumsy.com/demos/socialFeeds/

ライブページに移動して、デバッガーを確認してください。「pinterestinit」がログに表示されるはずです。しかし、メイン関数からTwitter.initを呼び出していたので、「twitterinit」がログに表示されることを期待していました。

私の設定は次のとおりです。2つの匿名の自己実行関数があり、どちらも内部にinit関数があります

var Twitter = (function($, window){ ... init = function ... 
var Pinterest = (function($, window){ ... init = function ... 

次に、メイン関数からTwitter.init(user_twitter_options);を呼び出しました。

しかし、Pinterest.initが実際に呼び出されているようです。Pinterest.initがTwitter.init関数を上書きしたようです。

誰かが何が悪いのか教えてもらえますか?匿名の自己実行関数を2つ持つべきではありませんか?

よろしくお願いします。

4

2 に答える 2

3

フィドルのコードには多くの問題があります。

Twitterとは、実際に新しいオブジェクトを作成したり、何かに設定するために何かをしたりしていないため、に等しいをPinterest返す無名関数を呼び出した結果に割り当てられています。thisthiswindownewthis

両方の無名関数内で、init = ...宣言せずに割り当てます。これは、グローバル変数になることvarを意味します。initしたがって、セクション内のコードは、セクション内で最初に作成されPinterestたグローバルを上書きします。initTwitter

グローバルは本質的にwindowオブジェクトのプロパティでTwitterあり、Pinterest両方が割り当てられているとすると、両方をwindow呼び出すことは、を呼び出すことと同じです。だから、彼らは両方とも同じことをするのです。Twitter.init()Pinterest.init()window.init()

残念ながら、あなたのコードは長すぎて動作するバージョンを提供できません。そのため、これらのリファレンスの一部またはすべてを読むことをお勧めします。

于 2012-07-16T02:21:12.717 に答える
1

varの前に追加する必要がありますinit。そうしないと、グローバルスコープに配置されます。これは、initが最後の割り当て(この場合はPinterestバージョン)と等しくなることを意味します。

于 2012-07-16T02:07:31.307 に答える