Javascript - initialiseur d'objet?
J'ai réalisé que vous pouvez avoir une propriété à un objet exécuter automatiquement comme ceci:
var obj = {
init:(function(){ alert('loaded');})();
}
Je suis en train d'utiliser cette méthode comme un initialiseur de l'objet. Le problème, je suis en cours d'exécution dans est de passer une référence à 'obj' à l'initialisation de la propriété. Je pense qu'elle génère des erreurs parce que le fichier n'a pas été complètement intégré dans le navigateur encore. Je suis en train de le faire, mais en vain. Si il y a une manière de le faire, j'aimerais savoir comment.
var obj = {
prop:function(){ alert('This just ran.'); },
init:(function(){ obj.prop(); })();
}
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez créer plusieurs instances d'objets similaires, vous devez utiliser le bon vieux constructeur de fonctions (n'oubliez pas de mettre des propriétés communes, dans le prototype!).
Si vous souhaitez créer un objet unique, envisager l'utilisation d'un anonyme constructeur. Votre exemple de lecture:
Cela a un avantage supplémentaire sur l'objet de littéraux: le constructeur de la fonction peut être utilisé comme une fermeture "privé" des variables.
N'abusez pas de l'objet de littéraux: ils peuvent faire des choses simples simple, mais complexe, les choses vont devenir trop compliqué.
new
mot-clé). Voir aussi stackoverflow.com/questions/20057431/... et enfinery.com/30/javascript-the-case-of-an-anonymous-constructorCe n'est pas possible: obj n'existe pas jusqu'à ce que l'ensemble du bloc est interprété.
Une alternative simple:
obj
à quelque valeur que ce soitinit()
retourne - qui dans cet exemple estundefined
.Pourquoi n'utilisez-vous pas le constructeur du modèle (en fait, je n'ai aucune idée de son nom exact):
Utilisation:
Oui, obj ne semble pas exister localement à plus tard. Cela a fonctionné pour moi avec
setTimeout
. Testé ok sur IE8, FF5, Chrome 12, Opera v11.5. Pas sûr au sujet de l'50 millisecondes bien, j'imagine que c'est assez.var
déclaration doit utiliserobj.prop
.c'est une mise à jour de l'exemple proposé par user1575313.
le code d'origine fonctionne, mais il limite l'utilisation de l'objet après l'installation. Par le renvoi de l'objet de référence dans la méthode init, il permet à l'objet d'être utilisé à l'extérieur de l'objet.
lien vers jsFiddle. jsFiddle
Init en jQuery style
jsbin.com
Je pense que vous voulez essayer quelque chose comme cela:
Objet littéraux reqire séparées par des virgules membres sans points-virgules.
Cela fonctionne si vous passez "ce" dans la fonction init?
quelque chose comme: (non testé)