Javascript命名空间-多个级别
Javascript Namespace - Multiple Levels
本文关键字:命名空间 Javascript 更新时间:2023-09-26
我目前正在做以下事情来给我的javascript代码一个命名空间:
(function(foo, $, undefined) {
// function: showNoteDialog
foo.showNoteDialog = function() {
// ...
}
}(window.foo = window.foo || {}, jQuery));
我更喜欢的是:
foo.showNoteDialog()
是有一个多级命名空间:
foo.notes.showDialog()
foo.other.showDialog()
这可能吗?我该怎么做呢?
我通常是这样做的:
var TopLevel = TopLevel || {}; //Exentd or Create top level namespace
TopLevel.FirstChild = TopLevel.FirstChild || {}; //Extend or Create a nested name inside TopLevel
使用此方法可以保证文件之间的安全性。如果TopLevel已经存在,你将把它赋值给变量TopLevel,如果它不存在,你将创建一个可以扩展的空对象。
所以假设你想创建一个应用程序,它存在于应用程序名称空间中,并在多个文件中扩展,你会希望文件看起来像这样:
File 1:
var Application = Application || {};
Application.CoreFunctionality = Application.CoreFunctionality || {};
Application.CoreFunctionality.Function1 = function(){
//this is a function
}//Function1
File 2:
var Application = Application || {};
Application.OtherFunctionality = Application.OtherFunctionality || {};
Application.OtherFunctionality.Function1 = function(){
//this is a function that will not conflict with the first
}
文件3 (worker):
//call the functions (note you could also check for their existence first here)
Application.CoreFunctionality.Function1();
Application.OtherFunctionality.Function1();
看一下namspace .js。它允许您使用公共和私有方法声明嵌套的名称空间。这很好,因为它允许您调用命名空间块内的任何方法而不带前缀——无论作用域如何。
(function() {
namespace("example.foo", bar);
function foobar() { return "foobar"; };
function bar() { return foobar(); };
}());
example.foo.bar(); // -> "foobar"
JS中没有命名空间,但是你可以将对象分配给其他对象,比如
x = {};
x.y = {};
x.y.z = function() {};
我使用bob.js框架:
bob.ns.setNs('myApp.myMethods', {
method1: function() {
console.log('This is method 1');
},
method2: function() {
console.log('This is method 2');
}
});
//call method1.
myApp.myMethods.method1();
//call method2.
myApp.myMethods.method2();
在javascript中自动多级命名空间声明非常简单,如您所见:
var namespace = function(str, root) {
var chunks = str.split('.');
if(!root)
root = window;
var current = root;
for(var i = 0; i < chunks.length; i++) {
if (!current.hasOwnProperty(chunks[i]))
current[chunks[i]] = {};
current = current[chunks[i]];
}
return current;
};
// ----- USAGE ------
namespace('ivar.util.array');
ivar.util.array.foo = 'bar';
alert(ivar.util.array.foo);
namespace('string', ivar.util);
ivar.util.string.foo = 'baz';
alert(ivar.util.string.foo);
试试吧:http://jsfiddle.net/stamat/Kb5xY/博客文章:http://stamat.wordpress.com/2013/04/12/javascript-elegant-namespace-declaration/
相关文章:
- 在javascript中使用命名空间
- javascript中的命名空间,IDE中支持代码完成/内容辅助's
- 如何使用javascript命名空间
- 转换自的JavaScript命名空间
- 什么's当前命名空间/类中JavaScript子命名空间/类的语法
- 在Firebug控制台中监视javascript命名空间变量
- 用自定义javascript全局命名空间替换窗口
- 怎么了?通过字符串定义 JavaScript 命名空间
- Javascript 命名空间/最佳实践
- IE中的Javascript命名空间抛出错误
- 处理此命名空间 JavaScript 结构的最佳方法是什么?
- 将 JavaScript 封装在命名空间中
- 将索引值传递给javascript命名空间数组
- JavaScript风格:我应该将这些东西中的哪些作为参数传递给我的命名空间函数
- 如何正确设置 JavaScript 命名空间和类
- 创建命名空间 Javascript 单例类的对象
- Xmlns 命名空间 JavaScript 删除
- 在我的命名空间JavaScript中使用this关键字
- 命名空间Javascript中的递归函数
- 构造函数-在简单的命名空间- Javascript