7
votes

JavaScript - Obtenir le propriétaire de la classe d'une fonction (méthode)

Il y a un moyen de savoir quelle classe possède une fonction? Exemple: xxx pré>

im en utilisant cette solution de contournement: p> xxx pré>

mais il y a un gros problème, regardez ceci: p>

Class({
    public:{
        MyClass:function(){
        },

        setName:function(name) {
            $(this).name=name; //set the private var name
        },
        getName:function(){
            return $(this).name;
        }
    },
    private:{
        name:"UNKNOWN"
    }
})

var o=new MyClass();
o.getName(); // UNKNOWN
o.setName("TEST!!!");
o.getName(); // TEST!!!
o.name; //undefined
$(o).name; //undefined


1 commentaires

Vous devrez désapprendre l'idée qu'il existe une "classe" dans JavaScript. Il n'y a pas.


7 Réponses :


0
votes

TEMP est l'appelant mais il n'a pas la propriété __ classe __ . Vous avez défini uniquement que pour test .


2 commentaires

Oui, je demande ici si quelqu'un connaît une autre solution.


ps. Je ne peux pas ajouter Classe Propriété à Temp.



0
votes

appelant n'est pas normalisé et vraiment fragile; mieux évité. Bien mieux de transmettre la valeur explicitement: xxx

ou: xxx


0 commentaires

2
votes

Votre scénario n'est pas tout à fait clair, mais voici quelques options: -

MyObject.prototype.test = function(){
   var self = this;
   var elem = //get some element;
   //Not cross-browser but for illustration
   elem.addEventListener('click', fnEvent);
   function fnEvent() { globalFunc.call(self); }
   elem = null
}


0 commentaires

3
votes

En JavaScript, il n'y a pas de classes. Au lieu de cela, plusieurs objets peuvent "posséder" la même fonction. Par exemple: xxx


1 commentaires

Les classes @Codemanx ES6 ne sont que du sucre de syntaxe. La définition d'une méthode dans une classe est la même que de régler la méthode sur le prototype du constructeur.



0
votes

Les fonctions ne sont pas "possédées" dans JavaScript. Les fonctions sont des objets de première classe en JavaScript, ce qui signifie qu'elles peuvent être transmises comme n'importe quelle autre variable et attribuée en tant que propriétés de nombreux objets.

Ceci à l'intérieur d'un corps de fonction vous donnera une référence à l'objet sur lequel la fonction a été appelée, si elle est appelée comme méthode (par exemple myobj.mymeThod () ) Ou via le prototype de fonction appel () ou appliquer () méthodes (par exemple myfunc.call (myOBJ) ). À l'intérieur d'une fonction appelée seul (par exemple, myfuncuncunc () ), Ceci sera généralement l'objet global (identique à la fenêtre dans la plupart des navigateurs ).


0 commentaires

2
votes

Je ne comprends pas bien ce que vous essayez de faire, mais voici une idée qui pourrait vous inspirer quelque chose.
La propriété "constructeur" m'a bien aidé quand j'essayais d'utiliser JS comme langue oo.

o.constructor vous donnera la référence myObject référence.

Mais à mon avis, vous devriez donner une programmation fonctionnelle un essai au lieu de OO pour tirer le meilleur parti de JavaScript


0 commentaires

0
votes

réponse courte, il n'y a vraiment aucun moyen de faire ce que vous essayez de faire. JavaScript ne fonctionne pas comme ça.

réponse longue ...

Presque tous les programmeurs que j'ai rencontrés qui sont venus à JavaScript d'une langue qui utilise un modèle d'objet classique a essayé de faire ce que vous faites: émuler le style classique de l'OUP qu'ils sont habitués à JavaScript. Il n'y a pas de honte ici, je l'ai fait, même le célèbre Douglas Crockford a expérimenté cela, puis l'a abandonné. Je l'ai fait aussi. Je pense toujours que c'était une chose nécessitante pour moi d'essayer ce genre de choses afin d'apprendre vraiment le language

Ne vous laissez pas berner par les accolades et les opérateurs familiers. À son noyau, il a très peu en commun avec Java! JavaScript est une languette fonctionnelle: les fonctions sont des objets à part entière.

émousseusement: il n'y a aucun moyen de faire ce que vous essayez de faire - avoir des objets avec des propriétés privées que vous pouvez accéder à ce

dire que c'est facile :) Comprendre comment appliquer qui est plus difficile

Il n'y a pas de classes, il n'y a que des objets. Les objets ont uniquement des propriétés. Les propriétés des objets peuvent avoir des valeurs. Ces valeurs peuvent être des fonctions. ce est défini lorsque la fonction est appelée, cela pourrait être n'importe quoi

La fermeture est la seule façon d'obtenir une véritable vie privée dans JavaScript. Tout le reste des fuites dans certaines périmètres de joindre, repose sur des noms de propriété obscurcés ou peut être contourné d'une manière ou d'une autre par l'appelant, ou de fuir la mémoire même lorsque les objets ne sont plus référencés (car il n'y a pas de fonction destructeurs pour faire votre nettoyage. dans).

Ce que vous faites est toujours une bonne chose à essayer, en essayant de devenir un meilleur programmeur JavaScript en déterminant: pourquoi tu ne peux pas faire une partie d'elle Plus important encore, pourquoi vous ne devriez probablement pas


0 commentaires