1 2 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