介绍Javascript名称空间的使用

使用java和c #学生在命名空间是熟悉的,在复杂的系统中会有N多,目标函数,结构和语言提供了预定义的函数,和这么多的对象,编程规范有名称的实际意义,同样不可避免地会犯错误,有一个电话,命名空间没有烦恼,不仅可以组织功能和目标分类,还可以解决同一问题的形式分离。

javascript的使用不是那么舒服,javascript只作用范围,什么啊,什么样的文件都是一个名称空间,有时造成一些错误复制,莫名其妙地难以调试和解决。

一个简单的例子

复制代码代码如下所示:



函数警报(){
/……

test2();
/……
}

功能test2(){
警报('test2)
}


在不同的浏览器的情况下,有不同的表现,即会报告堆栈溢出和Firefox会死。无论如何,都将是错误的,错误代码是很简单的,是在一个警报功能定义,警报功能调用test2功能,报警窗口打算调用test2功能,这个周期是所谓的,也许你会看到谁会犯明显的错误,但如果一个叫关闭自定义的方法(这往往),那么内部函数调用外部文件,函数调用窗口的关闭方法,这个错误是不是大量的隐藏。

一个简单的命名空间

由于Javascript没有文件范围,不同的功能分散在不同的文档中,甚至是不同的人编写的,同样的概率也会大大增加,足够小心了吗毫不奇怪,仍然有一些意想不到的情况,比如继承。所以我写了一个函数名延伸,没有出现过,但它增加了扩展功能添加到ecmascript5。命名空间的必要性得到了反映。

Javascript具有函数的作用域,可以用来将自定义函数写入函数体,从而使函数中的变量、对象和函数在命名空间中与外部隔离。

复制代码代码如下所示:



函数名称空间(){
此警报=函数(){
console.log(测试);
}
}



这种自定义警报方法不会与窗口的警报相冲突。

简单的进化

这是可以的,但有一个问题,最大的问题是调用的方式是复杂的和丑陋的!每次调用该调用时都实例化对象,然后调用它的方法,并对代码进行简单修改,使其自动实例化。

复制代码代码如下所示:



(函数名称空间(){
此警报=函数(){
console.log(测试);
}

窗口;
});



看看上面的代码,了解功能立即执行的第一件事(江湖人叫这个)是这样的
复制代码代码如下所示:
函数xxx(){

函数体

});

所以xxx函数在定义后可以自动执行,看起来很神奇。事实上,上述方法可以被拆除。

复制代码代码如下所示:
函数xxx(){

函数体

}

(XXX);


它是定义一个函数,然后用括号语法来调用它,而一个括号以外的函数定义只能把函数声明变成函数定义表达式,因为只有表达式可以用括号调用。在自定义命名空间函数结束时,将此窗口的NS属性,使用时直接调用ns.xx看起来好多了。

荣耀

上面的方法看起来很好,但是函数名,命名空间,似乎是多余的。它可以美化。

复制代码代码如下所示:
(函数(){())
此警报=函数(){
console.log(测试);
}

窗口;
});


一个匿名函数被立即执行,美化了一些,但它看起来仍然奇怪,是的,它是实例化函数,为什么不在方法定义中编写原型,匿名函数如何编写原型……而你必须移动你的大脑。

复制代码代码如下所示:
(函数(){())
_ns =函数(){ var

}
_ns。原型。警报功能(){
console.log(测试);
}
窗口。ns =新_ns();
});


写一些有用的函数

queryselector和querySelectorAll是W3C提出的新的查询接口,但是他们的名字很长。他们写了一个简单的innerHTML属性。它们通常用于编写模仿jQuery的HTML的简单版本。

复制代码代码如下所示:
(函数(){())
无功_ns =函数(){()

}

_ns.prototype.select =功能(选择、上下文){
VaR上下文=上下文文件| |;
返回context.queryselectorall(选择器);
}

_ns。原型。isarraylike =功能(obj){
如果(obj instanceof Array){
返回true;
}

Var length=obj.length;
如果(obj.nodetype长度= 1){
返回true;
}
返回false;
}

_ns.prototype.html =功能(obj值){
var ISArray = this.isarraylike(obj),i = 0;

如果(typeof值= = 'String'){
如果(!ISArray){
obj.innerhtml =价值;
{人}
VaR的长度= obj.length;
当(i <长度){
obj {我} .innerHTML =价值;
我= 1;
}
}
{人}
如果(!ISArray){
返回obj.innerhtml;
{人}
返回obj { 0 }。innerHTML;
}
}
}

window.ns =新_ns();
});


这样一个简单的带有名称空间的Javascript库被编写了。它不需要担心命名冲突,但是使用起来非常不方便。使用前端的学生使用了jQuery,jQuery就是jQuery。他们是怎么做的为他的葬礼,听下一次的分解。