J'ai un prototype:

var myClass = function() {};

J'ai une méthode sur cette classe:

myClass.prototype.method1() = function() {
   return x;
}

J'ai alors une deuxième méthode que je déclare de la même manière, mais je veux y accéder le résultat de method1(). Mais cela ne fonctionne pas, et je ne sais pas pourquoi ...

myClass.prototype.method2() = function() {
   return myClass.method1();
}

J'obtiens TypeError: myClass.method1 n'est pas une fonction

Quelqu'un peut-il indiquer ce qui ne va pas sur le plan syntaxique / conceptuel? Et suggérer des améliorations?

De plus, je ne suis pas à 100%, j'utilise correctement les termes «classe» et «prototype» dans ce cas. Si quelqu'un peut corriger la terminologie ou signaler toute autre terminologie associée à ce type de processus, je l'apprécierais!

Merci d'avance.

0
Paulos3000 7 août 2016 à 14:33

3 réponses

Meilleure réponse
var myClass = function() {};

Il s'agit d'un constructeur et non d'un prototype. Voici une lecture rapide expliquant la différence .

Vous pouvez l'appeler en utilisant this. Voici le meilleur endroit pour un rafraîchissement.

const MyClass = function() {};

MyClass.prototype.method1 = function() {
   return x;
}

MyClass.prototype.method2 = function() {
   return this.method1(); 
}

De plus, pas besoin de crochets dans les définitions de fonction de method1 et method2

1
Vandesh 7 août 2016 à 11:55

Le JS oop a une certaine différence entre les méthodes publiques et privilégiées.

myClass.method1(); est une méthode statique appelant. c'est comme une fonction normale et n'a aucune relation avec aucune instance d'objet myClass.

Vous devez donc l'appeler en utilisant l'espace de noms complet:

MyClass.method1()

0
Riad 7 août 2016 à 11:46

En effet (en utilisant une terminologie OO approximative), method1() est une méthode instance , et vous essayez de l'appeler comme une méthode statique .

const MyClass = function() {}; // MyClass is a constructor

MyClass.prototype.method1() = function() {
   return x;
}

MyClass.prototype.method2() = function() {
   return this.method1(); // Call it as an instance
}

Ou bien:

const MyClass = function() {};

MyClass.method1() = function() { // "static" method
   return x;
}

MyClass.prototype.method2() = function() {
   return MyClass.method1(); // Call it as a "static"
}

Il convient de noter que cette terminologie est trompeuse, il n'y a pas de méthodes statiques ou d'instance (en fait, il n'y a pas de méthodes en JavaScript, seulement des fonctions et des propriétés qui contiennent des références aux fonctions).

0
Madara's Ghost 7 août 2016 à 11:42