0

自己実行型の無名関数について読むほど、混乱します:)

私の質問は、jQueryのdocument.ready関数を使用する場合、アプリロジック全体をその関数内に配置する必要がありますか?他の自己実行型の無名関数にコードがある場合、document.ready呼び出し内からそのコードをトリガーするにはどうすればよいですか?(グローバル名前空間に変数を入れずに?)

Document.readyコード:

$(document).ready(function() {
    // how do I trigger another s.e.a.f. here?  
    var myApp = new App();
    myApp.initialize();
});

海の中での私のアプリロジック:

(function(window){  
   function App(){
        this.initializeApp = function() {
              // we are initialised!
        }
   }
   // how do I prevent putting 'App' in the global space?
   window.App = App;
})(window);
4

2 に答える 2

0

できません。

スコープ外の関数と通信する唯一の方法は、オブジェクトをグローバルスコープ内のどこかに配置することです。

代わりに、クロージャを介してローカル変数にアクセスできるように、IIFE$(document).ready() 内で呼び出す必要があります。

于 2013-01-20T13:45:32.067 に答える
0

「document.ready呼び出し内からそのコードをトリガーするにはどうすればよいですか?」

アプリロジックが最初に存在し、作成した関数名を使用していることを確認してください。

(function(window){  
   function App(){
        this.initializeApp = function() {
              // we are initialised!
            console.log('initialised');
        }
   }
   window.App = App;
})(window);

$(function(){
    var myApp = new App();
    myApp.initializeApp();  // not myApp.initialize(); 
});

しかし

// how do I prevent putting 'App' in the global space?

これは別の質問です...

別のインスタンスを使用してください。

jQuery(document).ready(function($){  
   function App(){
        this.initializeApp = function() {
              // we are initialised!
            console.log('initialised');
        }
   }
   // how do I prevent putting 'App' in the global space?

    var myApp = new App();
    myApp.initializeApp();    
});

jQuery(document).ready(function($){
    var myApp = new App(); // this will throw an error - it doesn't exist here
});
于 2013-01-20T13:55:19.880 に答える