JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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命名空间中的一些基本原理和模式.

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

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

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

大佬总结

以上是大佬教程为你收集整理的Javascript命名空间全部内容,希望文章能够帮你解决Javascript命名空间所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: