Je veux accéder à des variables en utilisantComment créer un espace de noms en JavaScript?
MyNamespace.variable1
qui sont globalement accessibles. Je crois que Drupal fait quelque chose de similaire, non?
Je veux accéder à des variables en utilisantComment créer un espace de noms en JavaScript?
MyNamespace.variable1
qui sont globalement accessibles. Je crois que Drupal fait quelque chose de similaire, non?
Qu'est-ce que Drupal fait est en utilisant le code suivant:
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);
}
});
};
// …
En utilisant un code similaire, vous pouvez émuler namespaces en utilisant JavaScript.
Créez simplement un objet. .: par exemple
var MyNamespace = {};
MyNamespace.variable1 = ...
Où puis-je déclarer ceci ... dans un espace global? – Shamoon
Vous pouvez forcer global à partir de n'importe où en l'affectant à 'window', par ex. 'window.MyNamespace = {}' – Matt
Juste pour être complet. JavaScript peut s'exécuter dans des environnements où il n'y a pas de DOM ou 'window', donc ne supposez pas toujours que vous pouvez l'utiliser. Je voudrais juste le définir dans l'espace global sans la «fenêtre». – Halcyon
var MyNamespace = {};
MyNamespace.variable1 = value1;
Il est juste un objet vraiment.
En outre, si vous avez beaucoup de fichiers JS que chaque ajouter un « espace de noms » ou un objet dans un package de niveau supérieur, vous pouvez faire des choses comme ceci:
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
}
Ensuite, vous pouvez bien sûr les appeler comme vous les avez besoin Modules.A.myFunc()
ou Modules.B.myFunc()
ou Modules.B.instnaceVar = 20;
. Vous pouvez donc encapsuler des fonctions ainsi que des variables.
Pour mon code, j'aime avoir un objet racine, (c'est-à-dire) et y ajouter des "classes" (objets) pour que tout ait une belle structure "OOP".
duplication possible de [Javascript Namespace Declaration] (http://stackoverflow.com/questions/881515/javascript-namespace-declaration) – haylem