如何在javascript中定义全局命名空间
how to define global namespace in javascript
有没有一种方法可以定义全局名称空间,这样我就可以在所有页面上从这个名称空间调用函数?
例如
//在一个文件中,我在下面定义了代码
DefineNameSpace("my.namespace.api", {
addObject: function(obj) {
// store obj into indexDB
},
readAllObject: function() {
// return array of object from indexdb
}
})
//这样我就可以在另一个javascript文件中进行
my.namespace.api.addObject({name: "foo", desc: "bar"});
有办法实现"DefineNameSpace"方法吗?
感谢
一种非常简单的方法是:
my = {
namespace: {
api : {}
}
}
my.namespace.api.addObject = function (obj) { }
你实际上是在创建对象,但通过这种方式,它也可以作为一个命名空间:)
嗯,这不是你正在实施的方法。但是,使用方法构建命名空间需要在加载脚本文件之前调用函数,在脚本文件中这样使用命名空间,否则在调用DefineNamespace方法之前调用这些代码行,您将遇到当时未定义的部分命名空间。对于上面的解决方案,情况不会是这样,尽管不幸的是它不是动态的。
动态构建命名空间可以通过以下方式完成:
// the root of the namespace would still be handy to have declared here
var my = {};
function defineNamespace(namespaceStr) {
var namespaceSegments = namespaceStr.split(".");
var namespaceSoFar = null;
// iterate through namespace parts
for (var i = 0; i < namespaceSegments.length; i++) {
var segment = namespaceSegments[i];
if (i == 0) {
// if namespace starts with my, use that
if (segment == "my") {
// set pointer to my
namespaceSoFar = my;
}
else {
// create new root namespace (not tested this, but think this should work)
var otherNamespace = eval(segment);
if (typeof otherNamespace == "undefined") {
eval(segment + " = {};");
}
// set pointer to created root namespace
namespaceSoFar = eval(segment);
}
}
else {
// further build the namespace
if (typeof namespaceSoFar[segment] == "undefined") {
namespaceSoFar[segment] = {};
}
// update the pointer (my -> my.namespace) for use in the next iteration
namespaceSoFar = namespaceSoFar[segment];
}
}
}
相关文章:
- 使用RequireJS定义全局命名空间
- 如何让 Mocha 加载定义全局钩子或实用程序的帮助程序.js文件
- 将 eval() 与自定义全局一起使用
- 如果全局不存在,则定义全局
- jQuery/Javascript:在函数中定义全局变量
- 如何在 JavaScript 中定义全局变量
- 如何在另一个函数中访问 JavaScript 自定义全局变量
- 如何在 javascript 中定义全局变量 scop
- 如何定义全局数组
- 如何在面向对象的javascript函数中更好地定义全局变量
- 在JavaScript函数中定义全局随机变量
- 如何在javascript中定义全局命名空间
- 用冲突的局部变量重新定义全局变量
- 在javascript中定义全局函数有什么不同之处吗
- 如何在ember-cli环境中定义全局变量
- 在ExtJS 4 MVC中,我应该在哪里定义全局函数
- 在匿名自执行函数中定义全局函数
- Javascript定义全局变量
- 声明和定义全局变量作为函数结果有时有效
- 为所有类定义全局方法