使用JavaScript命名空间有任何危险吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用JavaScript命名空间有任何危险吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1581字,纯文字阅读大概需要3分钟。
内容图文
![使用JavaScript命名空间有任何危险吗?](/upload/InfoBanner/zyjiaocheng/802/6b4b15334ab94fe181cd4d1e2d51f976.jpg)
在创建JavaScript命名空间时,是否应该注意任何危险/警告?
我们的项目相当广泛,我们运行了很多JavaScript文件(20个,期待更多).没有使用命名空间就不可能有任何代码可维护性,所以我们这样实现它们:
var namespace1 = {
doSomething: function() {
...
},
doSomethingElse: function() {
...
}
}
然后创建层次结构,我们将它们链接起来:
var globalNamespace = {
functions1: namespace1,
functions2: namespace2,
...
}
这工作正常,但它本质上是一个“技巧”,使JS表现得好像它确实有名称空间.尽管这种方法得到了很多应用,但大多数关于此的文献似乎都集中在如何做到这一点,而不是是否存在任何可能的缺点.随着我们编写更多JS代码,这很快就会成为我们系统工作方式的一个组成部分.因此无缝工作非常重要.
是否存在这种“诱导”命名空间系统导致错误或需要特别注意的情况?我们可以安全地期望所有浏
解决方法:
在您的示例中定义名称空间的方式似乎是从每个名称空间中创建全局变量,因此您最终会使用
window.namespace1
window.namespace2
window.globalNamespace
window.globalNamespace.namespace1
window.globalNamespace.namespace2
因此,如果你有任何破坏window.namespace1的东西,它也会破坏window.globalNamespace.namespace1
编辑:
以下是我们解决这个问题的方法:
namespacing = {
init: function(namespace) {
var spaces = [];
namespace.split('.').each(function(space) {
var curSpace = window,
i;
spaces.push(space);
for (i = 0; i < spaces.length; i++) {
if (typeof curSpace[spaces[i]] === 'undefined') {
curSpace[spaces[i]] = {};
}
curSpace = curSpace[spaces[i]];
}
});
}
};
然后你像这样使用它:
namespacing.init('globalNamespace.namespace1');
globalNamespace.namespace1.doSomething = function() { ... };
这样您就不必引入新的全局变量,并且可以放心地添加到现有命名空间而不会破坏其中的其他对象.
内容总结
以上是互联网集市为您收集整理的使用JavaScript命名空间有任何危险吗?全部内容,希望文章能够帮你解决使用JavaScript命名空间有任何危险吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。