Javascript库快速入门

时间:2012-11-14 15:05:00

标签: javascript jquery

我正在尝试构建一个Javascript库,它将为我正在整理的JQuery插件提供一些功能。

我从在线搜索得到以下骨架代码,虽然我不太确定它是如何工作的(我知道它是一个闭包)。我通过声明添加了我的功能。

(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()
  3. 感谢您的预期协助。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

我只能回答第二个问题,但你可以通过这样做来创建:

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

这样你就可以打电话:

Device.func_1();

跳跃有助于:)

答案 2 :(得分:0)

当一个东西在一个闭包里面时,它的范围就变成了那个闭包。 func_1func_2只能在调用它们的匿名函数中看到。