我想为我的应用程序创建一个全局命名空间,在这个名称空间中,我想要其他名称空间:
例如。
Dashboard.Ajax.Post()
Dashboard.RetrieveContent.RefreshSalespersonPerformanceContent();我还想把它们放在单独的文件中:
然而,我尝试过使用这方法,但是它不能工作,因为在两个不同的地方,名称空间都使用相同的变量名。有人能提供一个替代方案吗?
谢谢。
发布于 2010-08-05 04:39:14
如果名称空间对象已经创建,您只需要确保它不会被踩到。像这样的东西会有用的:
(function() {
// private vars can go in here
Dashboard = Dashboard || {};
Dashboard.Ajax = {
Post: function() {
...
}
};
})();RetrieveContent文件的定义也是类似的。
发布于 2011-06-16 23:19:04
这里是JavaScript中关于各种“模块模式”的一篇很好的文章。关于如何增强模块或名称空间,以及如何维护跨文件私有状态,有一个很好的小部分。也就是说,单独文件中的代码将在执行后按顺序执行,并适当地扩展命名空间。
我还没有彻底研究过这种技术所以没有承诺..。但这是基本的想法。
dashboard.js
(function(window){
var dashboard = (function () {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};
return my;
}());
window.Dashboard = dashboard;
})(window);dashboard.ajax.js
var dashboard = (function (my) {
var _private = my._private = my._private || {},
_seal = my._seal = my._seal || function () {
delete my._private;
delete my._seal;
delete my._unseal;
},
_unseal = my._unseal = my._unseal || function () {
my._private = _private;
my._seal = _seal;
my._unseal = _unseal;
};
// permanent access to _private, _seal, and _unseal
my.ajax = function(){
// ...
}
return my;
}(dashboard || {}));dashboard.retrieveContent.js
var dashboard = (function (my) {
var _private = my._private = my._private || {},
_seal = my._seal = my._seal || function () {
delete my._private;
delete my._seal;
delete my._unseal;
},
_unseal = my._unseal = my._unseal || function () {
my._private = _private;
my._seal = _seal;
my._unseal = _unseal;
};
// permanent access to _private, _seal, and _unseal
my.retrieveContent = function(){
// ...
}
return my;
}(dashboard || {}));发布于 2010-08-05 03:52:13
雅虎命名空间函数正是针对这个问题设计的。
添加:
函数的来源是可用的。您可以将其复制到您自己的代码中,如果需要,可以将根从YAHOO更改为其他内容,等等。
https://stackoverflow.com/questions/3410984
复制相似问题