Il existe trois façons d'implémenter les méthodes et les propriétés sur les objets de fonction ou de classe, et sur leurs instances.
-
Sur la classe (ou fonction) elle-même :
Foo.method()
o Foo.prop
. Ce sont des méthodes ou des propriétés statiques
-
Sur son prototype :
Foo.prototype.method()
o Foo.prototype.prop
. Une fois créées, les instances hériteront de ces objets via le prototype qui est {method:function(){...}, prop:...}
. Ainsi, le foo recevra, en tant que prototype, une copie de l'objet Foo.prototype objet.
-
Sur l'instance elle-même : la méthode ou la propriété est ajoutée à l'objet lui-même.
foo={method:function(){...}, prop:...}
El this
Le mot-clé représentera et agira différemment selon le contexte. Dans une méthode statique, il représentera la classe elle-même (qui est après tout une instance de Function : class Foo {}
est tout à fait équivalent à let Foo = new Function({})
Avec ECMAScript 2015, qui semble bien implémenté aujourd'hui, il est plus clair de voir la différence entre les classes ( statique ), les méthodes et propriétés d'instance et les méthodes et propriétés propres. Vous pouvez donc créer trois méthodes ou propriétés ayant le même nom, mais étant différentes parce qu'ils s'appliquent à des objets différents, le this
dans les méthodes, s'appliqueront, respectivement, à l'objet classe lui-même et à l'objet instance, par le prototype ou par le sien.
class Foo {
constructor(){super();}
static prop = "I am static" // see 1.
static method(str) {alert("static method"+str+" :"+this.prop)} // see 1.
prop="I am of an instance"; // see 2.
method(str) {alert("instance method"+str+" : "+this.prop)} // see 2.
}
var foo= new Foo();
foo.prop = "I am of own"; // see 3.
foo.func = function(str){alert("own method" + str + this.prop)} // see 3.
14 votes
Foo.talk = function ...
1 votes
@downvoterstepintothelight Le
Foo.walk = function() {}
n'aura pas d'effet sur ses instances, puisqu'il ne se trouve pas dans la chaîne des prototypes. Existe-t-il une méthode inter-navigateur permettant de rendre la fonction[[prototype]]
point à sonprototype
?3 votes
Probablement que je n'ai aucune idée de ce que tu veux, parce que les méthodes de la classe n'affectent pas les instances par définition.
0 votes
@downvoterstepintothelight J'en doute, méthode Dans un langage comme python, une instance est capable d'appeler la méthode de sa classe, la différence est la suivante
this
pointeur.