8
votes

Existe-t-il une meilleure méthode que de définir une variable à cela?

Dans mes objets javascript, je me suis retrouvé à écrire ceci: xxx

Il semble que ce soit le seul moyen de passer des variables de membre aux fonctions externes ... xxx

qui ne fonctionne pas, je dois copier l'objet dans une variable de membre et transmettre le nouvel objet (et remplacer tout ceci avec this_object )

Cela se sent laid. Y a-t-il une méthode "meilleure" ou "nettoyante", ou est-ce que ma seule option?


5 Réponses :


4
votes

C'est en fait un modèle assez courant lorsqu'il s'agit de JavaScript pour stocker une référence de ceci dans une variable locale I.e. var mointation = ceci; . 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.


0 commentaires

0
votes

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.


0 commentaires

0
votes

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.

http://developer.yahoo.com/yui/event/#Customvents


0 commentaires


5
votes

Bien sûr qu'il y a une meilleure méthode. Il implique de créer une fonction qui a le ce contexte code> déjà lié à un objet particulier.

Pour avoir le contexte code> se référer à l'objet actuel, appelez le 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))
            );
        };
    };
}


2 commentaires

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.