【问题标题】:What's namespace in JavaScript and how to export method from namespace?JavaScript 中的命名空间是什么以及如何从命名空间导出方法?
【发布时间】:2014-11-02 03:26:31
【问题描述】:

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);

现在我想在“spa”之外调用initModule,像这样

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

问题2:为什么要写

return {
    initModule: initModule
};

在我看来,return {initModule} 似乎更有意义,上面的代码是什么意思,它的语法是什么?

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

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

那么这里的$和jQuery是什么意思

function( $ ) {

}(jQuery)

【问题讨论】:

  • “对我来说,返回 {initModule} 似乎更有意义” 你可能会很高兴听到 ES6 将引入短对象表示法,其中 {initModule} 相当于 @ 987654328@.

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


【解决方案1】:

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

命名空间不是由语言定义的术语。它的常见用法只是表示“分配给全局变量的对象,一段代码的所有公共函数都分配给该对象,因此它们可以在仅使用单个全局变量的情况下全局公开”。

为什么我们要写return {等等等等

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

你需要它成为一个对象。

: 的左侧是属性名称,右侧是值(这是之前声明的局部变量,恰好与属性同名)。

return {initModule} 似乎更有意义

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

那么这里的$和jQuery是什么意思

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

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

【讨论】:

  • 我必须在这里定义一个 IIFE 吗?使 var spa = function ($) {} () 成为 IIFE 有什么意义?后面不加()怎么办?
  • 设计模式取决于它。如果你不调用函数,那么你将函数分配给变量而不是它的返回值。
  • 这称为显示模块模式。您可以在addyosmani.com/resources/essentialjsdesignpatterns/book 了解有关它和其他模式的更多信息
猜你喜欢
  • 2021-02-26
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 2018-08-25
  • 1970-01-01
相关资源
最近更新 更多