Javascript命名空间

前端之家收集整理的这篇文章主要介绍了Javascript命名空间前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望通过将其分解成不同的文件并使每个文件像这样的“sub”命名空间,使我的 javascript更加模块化.

subA.js

if(typeof ex == "undefined") {
    var ex = {};
}

ex.subA = function() {
//all functions of subA here
}

同样的subB等

目前我有1个文件,ex.js

var ex = (function() {
    //private vars/funcs
    return {
        //public vars/funcs
    }
})();

看起来我应该将我的大部分功能移到subA.js和subB.js,但是在开始时仍然包含ex.js,之后再使用subA.js和subB.js.

我有很多问题.

>我很难记得我是如何制作最初的命名空间文件ex.js.看起来匿名的功能是让最初的一切都是私有的,但我不记得为什么它需要被括在括号中,然后直接用()执行;最后.
>从q1开始,我的子文件与ex.js的格式是否一样,即将anon函数包含在括号中并立即执行?
>看起来子文件只能访问ex的public函数,这是真的吗?如果是,我如何允许我的子文件访问私人功能呢?
>在我的HTML文件中,在我的document.ready函数(jQuery)中,我应该将ex初始化为一个变量,还是可以单独调用每个函数

$(document).ready(function() {
    ex.doSomething();
    ex.doSomethingElse();
}

两者有区别吗?我认为,当包含ex.js时,一个全局变量ex被立即创建(由于匿名函数被立即执行),所以我不需要在document.ready中重新定义它.

>是在subA.js中的第一个if语句与var ex = ex ||有任何不同{};哪个更好?
>你使用什么样的js代码样式标准?

如果你阅读了所有这一切,你就应该得到一个upvote,欢呼.

解决方法

function(){return {}}是一个关闭,为变量和函数添加“隐私”,您不想在其他任何地方访问,但在该函数的范围内.函数周围的括号(function(){})创建一个函数表达式.它们被使用,因为当您尝试立即执行函数function(){}()而不将任何参数传递给()时,解析器将抱怨.

2.如果你想要subA或任何其他扩展对象有自己的子功能,那么是的,你必须声明它,但不是必须的一个clousure尽管.

你可以做

ex.subA = function(x,y){
    return x+y;
}

可以称为var sum = ex.subA(2,3);

或者你可以做

ex.subA = (function(){

    return {
        add: function(x,y){
            return x+y;
        },multiply: function(x,y){
            return x*y;
        }
    }
})();

然后调用var sum = ex.subA.add(2,3); var multiplier = ex.subA.multiply(2,3);

有很多方法可以做到这一点.

是的,是的.您可以将私有功能公开.关闭将不允许任何其他方式来做到这一点.

4.如果你想别名,可以将它分配给一个变量.但是,没有必要.它将以您描述的方式正常工作.

阅读Essential JavaScript Namespacing Patterns了解JavaScript命名空间中的一些基本原理和模式.

Is the first if statement in subA.js any different from var ex = ex ||
{}; Which is better?

首先,if语句应该是if(typeof ex ==’undefined’),typeof返回一个字符串.没有必要检查ex是否为false.

是的,它是不同的.如果已经定义了变量ex,则if语句将不会执行任何变量赋值.因此,if语句更好.

What js code style standards do you use?

取决于项目的范围,但主要是深层对象延伸与辅助功能.

猜你在找的JavaScript相关文章