17
loading...
This website collects cookies to deliver better user experience
class Bird {
constructor (name, age){
this.name=name;
this.age=age;
this.canFly= true;
}
}
const birdLarry= new Bird ("Larry", 4);
birdLarry.name;
à la console, le résultat serait "Larry"
. Si l'on écrirait birdLarry.age;
le résultat sérait le numéro 4. Et si l'on écrirait birdLarry.canFly;
, le résultat sérait "true"
.class Bird {
constructor (name, age){
this.name=name;
this.age=age;
this.canFly= true;
}
nameAge() {
return `${this.name} is ${this.age} years old`;
}
}
nameAge
donnera des informations sur l'instance Bird. Comme si l'on écrirait,birdLarry.nameAge();
le résultat sérait "Larry is 2 years old."
Pourtant, super simple. Mais, si l'on voulait changer le nom de l'oiseau? Dis-donc, de Larry à Clumsy? et si l'on voulait changer le nom aussi? class Bird {
constructor (name, age){
this.name=name;
this.age=age;
this.canFly= true;
}
nameAge() {
return `${this.name} is ${this.age} years old`;
}
setName(name) {
this.name = name;
}
setAge(age) {
this.age = age;
}
}
birdLarry.setName("Clumsy");
et appellerait birdLarry.name;
le résultat sérait "Clumsy"
depuis qu'on a modifié le nom d'origine de l'instance de class. Aussi, depuis que Clumsy doit être un peu jeune, on voudrait modifier son âge aussi en écrivant birdLarry.setAge(2)
dans la console.Maintenant, chaque fois que l'on appele birdLarry.age;
le résultat serait 2.class Bird {
static kingdom(){
return "Animalia";
}
static kingdomSentence () {
return `Birds belong to the kingdom ${this.kingdom()}`;
}
constructor (name, age){
this.name=name;
this.age=age;
this.canFly= true;
}
}
birdLarry.kingdom()
, le résultat serait quelque chose comme Uncaught TypeError: birdLarry.kingdom is not a function at <anonymous>:1:11
Uf. Mais pourquoi?birdLarry
est une instance de classe Bird. Donc, la méthode statique ne fonctionnerait pas de tout.Par contre, la méthode statique ne fonctionnerait qu'avec la classe Bird. Comme ça: Bird.kingdom()
retournerait "Animalia". Et si l'on écrirait Bird.kingdomSentence()
il retournerait "Birds belong to the kingdom Animalia"
. Assez chouette eh?class Bird {
static kingdom= "Animalia";
static kingdomSentence=`Birds belong to the kingdom ${this.kingdom}`;
constructor (name, age){
this.name=name;
this.age=age;
this.canFly= true;
}
}
this.kingdom
. Cette méthode fonctionne exactement comme ci-dessus, mais elle est plus propre. Maintenant, que se passerait-il si l'on écrirait Bird.kingdom ()
?Uncaught TypeError: Bird.kingdom is not a function at <anonymous>:1:6
, car maintenant ce sont des propriétés, pas des fonctions! Donc, on les appellerait comme: Bird.kingdom
; qui renverrait "Animalia"
, et Bird.kingdomSentence
qui renverrait "Birds belong to the kingdom Animalia"
.canFly
pointe vers "false" :)class Penguin extends Bird {
constructor (name,age){
super(name,age);
this.canFly=false;
}
}
coldFeet
:const coldFeet= new Penguin("ColdFeet", 3);
Coldfeet
peut accéder ą tout ce que birdLarry
peut! Si l'on écrirait coldFeet.age
, le résultat serait 3. Si l'on écrirait coldFeet.canFly
, le résultat serait "false"
. Pourquoi? Evidemment, car on était d'accord que les pingouins ne peuvent pas voler, n'est-ce pas? :) Et lest autres méthodes? Par exemple, que se passerait-il si l'on écrirait coldFeet.nameAge();
?"ColdFeet is 3 years old"
car, encore une fois, la classe Penguin partage tout avec la classe Bird!Penguin.kingdomSentence
, le résultat serait "Birds belong to the kingdom Animalia"
(car les pingouins sont des oiseaux, mais vas-y là...)17