繁体   English   中英

Javascript库快速入门

[英]Javascript Library Quickstart

我正在尝试构建一个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()

感谢您的预期帮助。

闭包用于隐藏其余代码的内部函数。 您需要显式公开库的公共函数:

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); part被称为立即调用的函数表达式(IIFE)。 它用于避免将所有库函数泄漏到全局范围。 否则,如果某个其他库具有func_1函数,它将被覆盖或覆盖库的func_1

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

或者使用上面的代码 - 返回一个对象 - 您也可以将库直接分配给全局范围:

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

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

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

那样你就可以打电话:

Device.func_1();

跳帮助:)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM