De nos jours, je crée un fichier .js avec beaucoup de fonctions, puis je le relie à mes pages html. Cela fonctionne mais je veux savoir quelle est la meilleure façon (bonnes pratiques) d'insérer js dans mes pages et d'éviter les conflits avec la portée ... Merci.JavaScript: portée globale
Répondre
Ce n'est peut-être pas la meilleure façon, mais beaucoup de systèmes PHP (je vous regarde, Drupal) prennent le nom de leur plugin particulier et le préfixent à tous leurs noms de fonctions. Vous pourriez faire quelque chose de similaire, en ajoutant le nom de votre capacité à vos noms de fonctions - "mything_do_action()"
Alternativement, vous pourriez adopter une approche plus "OO", et créer un objet qui encapsule vos capacités, et ajouter tout vos fonctions en tant que membres sur IT. De cette façon, il n'y a qu'une seule chose à craindre à l'échelle mondiale.
J'essaie d'apprendre OO avec JavaScript, mais c'est difficile pour moi. Il y a beaucoup de syntaxe pour faire une simple "classe" ou quoi que ce soit d'autre en JavaScript :) Merci. – thomas
Le meilleur moyen est de créer une nouvelle portée et d'y exécuter votre code.
(function(){
//code here
})();
Ceci est préférable lorsque la portée globale est atteinte au minimum.
Fondamentalement, cela définit une fonction anonyme, lui donne une nouvelle portée, et l'appelle.
Que signifie "()"? Un lien à ce sujet? Et qu'en est-il de window.onload? Où devrais-je mettre cela? Existe-t-il une pratique similaire à bootstrap en JavaScript? Merci. – thomas
Personnellement, je pense qu'il est plus facile de comprendre une fonction anonyme si vous voyez tout sur une seule ligne. Malheureusement, je n'ai pas de sauts de ligne dans les commentaires, mais si vous y pensez de cette façon: c'est comme exécuter une fonction déjà existante, mais au lieu d'utiliser le nom de la fonction, vous mettez la définition de la fonction entre parenthèses. – lucideer
Vous pouvez réellement le faire par exemple: (function (param) {/ * * /}) ('param value'); – lucideer
Une idée simple est d'utiliser un objet qui représente votre espace de noms:
var NameSpace = {
Person : function(name, age) {
}
};
var jim= new NameSpace.Person("Jim", 30);
Vous pouvez les envelopper dans une fonction anonyme comme:
(function(){ /* */ })();
Cependant, si vous avez besoin de réutiliser toutes les fonctions javascript que vous avez écrites ailleurs (dans d'autres scripts), il vaut mieux créer un seul objet global sur lequel vous pouvez accéder. Soit comme:
var mySingleGlobalObject={};
mySingleGlobalObject.someVariable='a string value';
mySingleGlobalObject.someMethod=function(par1, par2){ /* */ };
ou l'alternative, la syntaxe plus courte (ce qui fait la même chose):
var mySingleGlobalObject={
someVariable:'a string value',
someMethod:function(par1, par2){ /* */ }
};
Cela peut alors accéder à la suite d'autres scripts comme:
mySingleGlobalObject.someMethod('jack', 'jill');
Je pense qu'il est plus sûr d'envelopper toujours votre code avec (function() {/ * * /})(); juste au cas où vous incluez un script qui est mal terminé. Ensuite, je suppose que vous pourriez ajouter votre mySingleGlobalObject à "document" par exemple, pour le partager avec d'autres scripts. – endavid
http: //javascript.crockford.com/code.html – Anders