2015-05-31 46 views
-1

功能是一樣調用$(文件)中的對象:如何。就緒從外面

(function ($) { 
 
\t $(document).ready(function() { 
 
\t \t var MyObject = { 
 
\t \t \t MyFunction: function(){ 
 
\t \t \t \t alert('I am here'); 
 
\t \t \t } 
 
\t \t } 
 
\t }); 
 
}(jQuery)); 
 

 
MyObject.MyFunction();

我怎樣才能把它像上面?

+1

只有在文檔準備好後,MyObject變量纔會被初始化。你爲什麼想在此之前稱呼它? –

+0

你想要哪個物體可用?只在範圍(文件)中聲明?或者也在外部範圍(文件)? – lshettyl

回答

0

document.ready()回調按其註冊順序調用(ref)。實現您的目標的一種方法是創建一個全局對象,然後將其初始化爲一個$(document).ready(),並在隨後的$(document).ready()中調用它。

var MyObject = {}; 
 
(function($) { 
 
    $(document).ready(function() { 
 
    MyObject = { 
 
     MyFunction: function() { 
 
     alert('I am here'); 
 
     } 
 
    } 
 
    }); 
 
}(jQuery)); 
 

 

 
(function($) { 
 
    $(document).ready(function() { 
 
     MyObject.MyFunction();  
 
    }); 
 
}(jQuery));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

0

您變量失去你在哪裏宣佈它的事件以外的範圍。

您的代碼

(function ($) { 
    $(document).ready(function() { 
    var MyObject = { 
     MyFunction: function(){ 
      alert('I am here'); 
     } 
    } 
    }); 
    }(jQuery)); 

你的宣言,外由

var MyObject 

需要到外面$一些其他的功能的範圍不是由你的函數調用訪問定義的任何其它範圍(文件)。就緒(...)

0

因此,您在選項1之後。

// Option 1: Object in a gloabl scrope 
var myObject = { 
    myFunction: function(){ 
     alert('I am here'); 
    } 
}; 

(function ($) { 

    // Option 2: Object in a function scope 
    var myObject2 = { 
     myFunction2: function(){ 
      alert('I am here 2'); 
     } 
    }; 

    $(document).ready(function() { 
     // Option 3: Object in a local (to the "(function ($) {") function scope 
     var myObject3 = { 
      myFunction3: function(){ 
       alert('I am here 3'); 
      } 
     }; 

     //alerts 'I am here 2'; 
     myObject2.myFunction2(); 

     //alerts 'I am here 3'; 
     myObject3.myFunction3(); 
    }); 

    //alerts 'I am here 2'; 
    myObject2.myFunction2(); 

    //Uncaught TypeError: myObject3.myFunction3 is not a function - can't access a locally scoped function on a global scope 
    myObject3.myFunction3(); 

}(jQuery)); 

//alerts 'I am here'; 
myObject.myFunction(); 

//Uncaught TypeError: myObject2.myFunction2 is not a function - can't access a locally scoped function on a global scope 
myObject2.myFunction2(); 

//Uncaught TypeError: myObject3.myFunction3 is not a function - can't access a locally scoped function on a global scope 
myObject3.myFunction3();