Juste des notes supplémentaires. Avec la classe ES6, lorsque nous créons des méthodes statiques, le moteur Javacsript définit l'attribut descriptor d'une manière un peu différente de la méthode "statique" traditionnelle.
function Car() {
}
Car.brand = function() {
console.log('Honda');
}
console.log(
Object.getOwnPropertyDescriptors(Car)
);
il fixe l'attribut interne (propriété du descripteur) pour brand() à
..
brand: [object Object] {
configurable: true,
enumerable: true,
value: ..
writable: true
}
..
par rapport à
class Car2 {
static brand() {
console.log('Honda');
}
}
console.log(
Object.getOwnPropertyDescriptors(Car2)
);
qui définit l'attribut interne pour brand() à
..
brand: [object Object] {
configurable: true,
enumerable: false,
value:..
writable: true
}
..
voir que énumérable est réglé sur faux pour les méthodes statiques dans ES6.
cela signifie que vous ne pouvez pas utiliser la boucle for-in pour vérifier l'objet
for (let prop in Car) {
console.log(prop); // brand
}
for (let prop in Car2) {
console.log(prop); // nothing here
}
La méthode statique dans ES6 est traitée comme une propriété privée d'une autre classe (nom, longueur, constructeur) sauf que la méthode statique est toujours accessible en écriture donc le descripteur. accessible en écriture est réglé sur vrai { writable: true }
. cela signifie également que nous pouvons l'ignorer.
Car2.brand = function() {
console.log('Toyota');
};
console.log(
Car2.brand() // is now changed to toyota
);
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.