2012-11-14 107 views
0

我试图建立一个Javascript库,将提供一些功能,我正在放在一起的JQuery插件。Javascript库快速入门

我从网上搜索了下面的框架代码,虽然我不太清楚它是如何工作的(我知道它是一个闭包)。我已经通过声明添加了我的函数。

(function(window, document, $) { 

    function func_1(){ 
     return 1; 
    } 

    function func_2(){ 
     return 2; 
    } 

})(window, document, jQuery); 

所以我把上面的代码在一个单独的JS文件,然后采购它在我的HTML页面,然后我跑尝试运行的功能,像这样(注:我有JQuery的设置以及):

<script type="text/javascript"> 
     $(document).ready(function() { 
      console.log(func_1()); 
     }); 
</script> 

但是,我似乎在Firebug(ReferenceError: func_1 is not defined)中得到一些错误。

我有两个问题:

  1. 我怎么叫我的功能?
  2. 我希望能够以下列格式调用函数:className.functionName()。我如何重构框架代码,使我能够做到这一点,并说,像这样调用我的功能:Device.func_1()

感谢您的期望帮助。

回答

2

闭包用于隐藏其余代码的内部函数。你需要明确揭露图书馆的公共职能:

var Device = (function(window, document, $) { 
    function func_1(){ 
     return 1; 
    } 

    function func_2(){ 
     return 2; 
    } 

    var internalDevice = { 
     func_1: func_1, 
     func_2: func_2 
    }; 
    return internalDevice; // expose functionality to the rest of the code 
})(window, document, jQuery); 

(function(window, document, $) {})(window, document, jQuery);部分被称为立即调用的函数表达式(IIFE)。它用于避免将所有库函数泄漏到全局范围中。否则,如果某个其他库具有func_1函数,它将被覆盖或覆盖您的库func_1

该函数的参数用于控制库如何影响代码的其他部分并依赖它。例如,某人可能会覆盖该窗口。$ library,这样$在代码中的任何地方都不再可用。但既然你在封闭中有一个本地引用,你仍然可以访问它。

或者使用上面的代码 - 返回一个对象 - 您也可以直接给您的图书馆向全球范围:

(function(window, document, $) { 
    ... 
    window.Device = internalDevice; // expose functionality to the rest of the code 
})(window, document, jQuery); 
+0

非常感谢!这正是我需要的。干杯。 –

0

我只能回答问题二号,但您可以创建,通过这样做:

var Device = { 
function func_1() 
{ 
// your first function 
}, 
function func_2() 
{ 
// your second function 
} 
}; 

这样,你可以只要致电:

Device.func_1(); 

合帮助:)

0

当事情是瓶盖内它的范围变更为关闭。 func_1func_2只能在调用它们的匿名函数内部和下面看到。