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,欢呼.
解决方法
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?
取决于项目的范围,但主要是深层对象延伸与辅助功能.