JavaScript中的命名空间以及如何从命名空间导出方法?

时间:2014-09-08 20:02:03

标签: javascript jquery node.js namespaces single-page-application

Please check this link for my complete code (It's simple though)

问题1:JavaScript中定义的命名空间是什么?根据我的理解,看起来任何对象都可以是命名空间?

假设我们有一个名为' SPA'的命名空间,这意味着"简单页面应用程序",在这个命名空间内,我定义了四个模块范围变量,$ chatSlider,$ toggleSlider,$ onclickSlider ,initModule;

var spa = (function( $ ) {
    // Module scope variables
    var
    // Set constants
        configMap = {
            // some code here
        },

        // Declare all other module scope variables
        $chatSlider, toggleSlider, onClickSlider, initModule;

    toggleSlider = function() {
        // some code here
        }
        // do not take action if slider is in transition
        return false;
    }

    onClickSlider = function(event) {
        toggleSlider();
        return false;
    }

    // Public method / initModule/ 
    // sets initial state and provides feature

    initModule = function($container) {
       // some code here
        return true;
    };

    return {
        initModule: initModule
    };
})(jQuery);

现在我想在外面调用initModule" spa",就像这样

$(document).ready(function () {
    spa.initModule( $('#spa'));
});

问题2:我们为什么要写

return {
    initModule: initModule
};

对我来说,返回{initModule}似乎更有意义,上面的代码是什么意思,它的语法是什么?

最后但并非最不重要的是,通常我会以

这样的格式编写函数
function ( $var) {
   // function code here
}

那么这个$和jQuery在这里是什么意思

function( $ ) {

}(jQuery)

1 个答案:

答案 0 :(得分:2)

  

JavaScript中定义的命名空间是什么?

命名空间不是该语言定义的术语。它的常见用法仅指“分配给全局变量的一个对象,一段代码的所有公共函数都分配给它,这样它们就可以全局公开,而只使用一个全局变量”。

  

为什么我们必须写return {等等

否则,立即调用的函数表达式(IIFE)将返回undefined。返回值是分配给全局变量(spa)的值。

你需要它作为一个对象。

:的左侧是属性名称,右侧是值(前面声明的本地变量,它恰好与属性同名)。

  

return {initModule}似乎更有意义

这是JavaScript中的语法错误。对象由一组属性/值组成。

  

那么这个$和jQuery在这里是什么意思

$是函数表达式定义中的参数名称。

jQuery是在调用该函数时立即作为第一个参数传递的值(立即执行)。