我想使用
访问变量MyNamespace.variable1
可全球访问。我相信Drupal做了类似的事情,不是吗?
答案 0 :(得分:4)
var MyNamespace = {};
MyNamespace.variable1 = value1;
这只是一个对象。
答案 1 :(得分:3)
另外,如果你有很多JS文件,每个文件都将“命名空间”或对象添加到顶级包中,你可以这样做:
ModuleA.js
// if Modules is null, create a new object, else use the currently defined instance
var Modules = Modules || {};
Modules.A = {};
// sample instance variable
Modules.A.instanceVar;
// sample function
Modules.A.myFunc = function(param1, param2) {
// do something
}
ModuleB.js
// if Modules is null, create a new object, else use the currently defined instance
var Modules = Modules || {};
Modules.B = {};
// sample instance variable
Modules.B.instanceVar;
// sample function
Modules.B.myFunc = function(param1, param2) {
// do something
}
然后,您当然可以在需要时Modules.A.myFunc()
或Modules.B.myFunc()
或Modules.B.instnaceVar = 20;
拨打电话。所以你可以封装函数和变量。
对于我的代码,我喜欢有一个根对象,(即)然后向它添加“类”(对象),这样一切都有一个很好的“类似包”,“OOP”结构。
答案 2 :(得分:3)
Drupal所做的是使用以下代码:
var Drupal = Drupal || { 'settings': {}, 'behaviors': {}, 'locale': {} };
Drupal.attachBehaviors = function (context, settings) {
context = context || document;
settings = settings || Drupal.settings;
// Execute all of them.
$.each(Drupal.behaviors, function () {
if ($.isFunction(this.attach)) {
this.attach(context, settings);
}
});
};
Drupal.detachBehaviors = function (context, settings, trigger) {
context = context || document;
settings = settings || Drupal.settings;
trigger = trigger || 'unload';
// Execute all of them.
$.each(Drupal.behaviors, function () {
if ($.isFunction(this.detach)) {
this.detach(context, settings, trigger);
}
});
};
// …
使用类似的代码,您可以使用JavaScript模拟名称空间。
答案 3 :(得分:2)
只需创建一个对象。 E.g:
var MyNamespace = {};
MyNamespace.variable1 = ...