2013-01-05 52 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);