Javascript库快速启动

Javascript库快速启动,javascript,jquery,Javascript,Jquery,我正在尝试构建一个Javascript库,它将为我正在构建的JQuery插件提供一些功能 我从网上搜索中得到了下面的框架代码,虽然我不太确定它是如何工作的(我知道这是一个结尾)。我通过声明添加了我的函数 (function(window, document, $) { function func_1(){ return 1; } function func_2(){ return 2; } })(window, documen

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

我从网上搜索中得到了下面的框架代码,虽然我不太确定它是如何工作的(我知道这是一个结尾)。我通过声明添加了我的函数

(function(window, document, $) {

    function func_1(){
        return 1;
    }

    function func_2(){
        return 2;
    }

})(window, document, jQuery);
因此,我将上面的代码放在一个单独的JS文件中,然后在我的HTML页面中对其进行源代码分析,然后我试着像这样运行函数(注意:我还设置了JQuery):


$(文档).ready(函数(){
log(func_1());
});
但是,我似乎在Firebug中遇到了一些错误(
ReferenceError:func_1未定义

我有两个问题:

  • 我如何调用我的函数
  • 我希望能够以以下格式调用函数:
    className.functionName()
    。如何重新构造骨架代码,使我能够执行此操作,并像这样调用我的函数:
    Device.func_1()

  • 感谢您预期的帮助。

    我只能回答第二个问题,但您可以这样做:

    var Device = {
    function func_1()
    {
    // your first function
    },
    function func_2()
    {
    // your second function
    }
    };
    
    这样你就可以直接打电话:

    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);
    
    (函数(窗口,文档,$){})(窗口,文档,jQuery)部分被称为立即调用的函数表达式(IIFE)。它用于避免将所有库函数泄漏到全局范围。否则,如果其他库具有
    func\u 1
    函数,则它将被覆盖或覆盖库的
    func\u 1

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

    除了使用上面的代码(返回对象)之外,您还可以将库直接分配给全局作用域:

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

    当某个对象位于闭包内时,它的范围将更改为该闭包
    func_1
    func_2
    只能在调用它们的匿名函数内部和下面看到。

    非常感谢!这正是我需要的。干杯
    (function(window, document, $) {
        ...
        window.Device = internalDevice; // expose functionality to the rest of the code
    })(window, document, jQuery);