Dans mes objets javascript, je me suis retrouvé à écrire ceci: Il semble que ce soit le seul moyen de passer des variables de membre aux fonctions externes ... p> qui ne fonctionne pas, je dois copier l'objet dans une variable de membre et transmettre le nouvel objet (et remplacer tout Cela se sent laid. Y a-t-il une méthode "meilleure" ou "nettoyante", ou est-ce que ma seule option? P> p> ceci code> avec
this_object code>) p>
5 Réponses :
C'est en fait un modèle assez courant lorsqu'il s'agit de JavaScript pour stocker une référence de ceci code> dans une variable locale I.e.
var mointation = ceci; code>. Rappelez-vous que les fonctions ont accès aux variables locales définies dans leur portée. Toute variables définies dans les fonctions contenant est accessible. P>
J'ai déjà vu le modèle (avec la variable en question appelée), donc je suppose que c'est bien un modèle javascript commun qui ne dispose pas d'une solution plus propre. P>
Je ne suis pas certain que cela aidera tout scénario auxquels vous avez affaire, mais j'ai trouvé l'utilitaire d'événement personnalisé de YUI de fonctionner bien avec les problèmes de cadrage avec cette ferme et des fermetures. C'est un modèle axé sur l'événement et une manière légèrement différente de penser, mais cela pourrait être à explorer au moins. P>
Vous trouverez ce morceau de code assez fréquent dans de nombreuses bibliothèques et projets: par exemple, considérez cette fonction: p>
Bien sûr qu'il y a une meilleure méthode. Il implique de créer une fonction qui a le Pour avoir le contexte code> se référer à l'objet actuel, appelez le ce contexte code> déjà lié à un objet particulier.
Bind () Code> Méthode sur la fonction et transmettez le contexte requis sous forme de paramètre. P>
if (!Function.prototype.bind) {
Function.prototype.bind = function () {
var fn = this,
args = Array.prototype.slice.call(arguments),
object = args.shift();
return function () {
return fn.apply(
object, args.concat(Array.prototype.slice.call(arguments))
);
};
};
}
Cela ressemble à son couple de couple au-dessus de ma palette JavaScript, mais je vais essayer de le absorber. Merci
Cela a la possibilité d'introduire un appel de fonction supplémentaire, mais +1 néanmoins.
Voir aussi: 'Cet objet peut 'T être accessible dans des fonctions javascript privées sans hack?