| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 
 | /* Pour les navigateurs n'implémentant pas ES5 */
if (!Object.create) {
  Object.create = function(o) {
    function F() {}
    F.prototype = o;
    return new F();
  };
}
 
// Voici un objet, nommé Animal. Implicitement, son prototype est Object
var Animal = {
  init: function(type, nom) {
    this.type = type;
    this.nom = nom;
  },
  presenter: function() {
    return "Je suis un " + this.type + " et je me prénomine " + this.nom + " ! ";
  }
};
 
// Voici un autre objet, Canard. Explicitement, on le créé à partir de Animal. Le prototype de Canard est donc Animal.
var Canard = Object.create(Animal);
// cette méthode ne sera disponible que pour cet objet Canard et les objets susceptibles d'être créés à partir de lui
Canard.crier = function() {
  return "coin coin !";
};
 
// Voici un autre objet, Cochon. Explicitement, on le créé à partir de Animal. Le prototype de Cochon est donc Animal.
var Cochon = Object.create(Animal);
// cette méthode ne sera disponible que pour cet objet Cochon et les objets susceptibles d'être créés à partir de lui
Cochon.crier = function() {
  return "groin groin !";
};
 
// création d'un objet canard1, créé à partir de Canard.
// chaine de prototype : canard1 > Canard > Animal > Object
var canard1 = Object.create(Canard);
canard1.init("canard célèbre", "Donald"); // canard1 n'a pas de méthode init(), on check dans le prototype direct, de Canard donc puis Animal.
console.log(canard1.presenter()); // méthode de Animal
console.log(canard1.crier()); // méthode de Canard
 
// chaine de prototype : cochon1 > Cochon > Animal > Object
var cochon1 = Object.create(Cochon);
cochon1.init("cochon grimpeur", "Super cochon"); // On check dans cochon1, la méthode init n'existe pas. Du coup, on descend la chaine de prototype, et on check dans Cochon, etc .... jusqu'à Animal
console.log(cochon1.presenter()); // méthode de Animal
console.log(cochon1.crier()); // méthode de Cochon
 
// Pour checker les prototypes
console.log(Animal.isPrototypeOf(cochon1)); // true
console.log(Animal.isPrototypeOf(canard1)); // true
console.log(Animal.isPrototypeOf(Canard)); // true
console.log(Canard.isPrototypeOf(canard1)); // true
console.log(Canard.isPrototypeOf(cochon1)); // false | 
Partager