2013-01-05 58 views
1

我有以下的javascript,使功能$E如何讓我的功能可見在全球範圍內

window.onload它拋出錯誤$E沒有定義。

所以我的問題是如何使$E在全球範圍內可見的,所以我可以在(function(){})();功能之外訪問它

window.onload = function() { 
    $E("bhavik").warn(); 
} 
(function() { 
       function $E(s) { 
        return new ge(s) 
       } 
       function ge(sel) { 
        this.arg = sel; 
        return this; 
       } 
       ge.proto = ge.prototype = {warn: function() { 
         alert(this.arg) 
        }}; 
       ge.proto.hi=function(){alert("hi "+this.arg)} 
       $E("bhavik").hi(); 
      })(window); 
+0

爲什麼你的函數寫入函數$ E(){}'insite'(function(){});'寫出 –

+0

就像jquery –

回答

2

爲了使變量可見在全球範圍內,設置它的window對象。例如:

function $E(s) { 
    return new ge(s); 
} 
window.$E = $E; 
+0

我仍然無法訪問它 –

0

只是聲明它的匿名函數之外。通過在模塊內部聲明所有代碼,您將創建一個新的作用域,與所有其他代碼隔離開來,如果您希望在全局上下文中可用,只需在該函數之外聲明它即可。

0

嘗試改變函數聲明的順序

(function() { 
      function $E(s) { 
       return new ge(s) 
      } 
      window.$E = $E; 
      function ge(sel) { 
       this.arg = sel; 
       return this; 
      } 
      ge.proto = ge.prototype = {warn: function() { 
       alert(this.arg) 
      }}; 
      ge.proto.hi=function(){alert("hi "+this.arg)} 
      $E("bhavik").hi(); 
     })(window); 
window.onload = function() { 
    $E("bhavik").warn(); 
0

這樣函數從另一個函數內的全球測試時:

function test() 
{ 
    window.$E = function() { alert('test'); }; 
} 

test(); 
$E(); 

http://jsfiddle.net/WEg4b/

因此,以使其適應您的需求:

(function() { 

       function ge(sel) { 
        this.arg = sel; 
        return this; 
       } 

       window.$E = function $E(s) { return new ge(s); }; 

       ge.proto = ge.prototype = {warn: function() { 
         alert(this.arg) 
        }}; 
       ge.proto.hi=function(){alert("hi "+this.arg)} 
       $E("bhavik").hi(); 
      })(window);