Try Out New Website HTML Table Generator

Human.js

File: Human.js

/**
* Cette fonction retourne un objet qui hérite des propriétés du
* prototype de l'objet paramètre p.
*
* Cette fonction contient un "fallback", c'est à dire une astuce qui
* permet à la fonction de fournir un résultat correct même dans le cas
* d'anciens navigateurs (n'implémentant pas le standard ECMAScript5).
*
* Cette fonction est extraite de l'ouvrage "Javascript, The Definitive
* Guide" par David Flanagan, édition O'Reilly, 6ème édition (2011).
*/
function inherit(p) {
    'use strict';

    // p doit être un objet non nul
    if (p == null) throw new TypeError();

    // --- Cas normal ---
    // Si Object.create() est défini (cas des navigateurs récents 
    // implémentant les fonctions ECMAScript5)...
    if (Object.create) return Object.create(p);


    // --- Fallback (pour les vilains navigateurs) ---
    // Type de l'objet passé en paramètre de la fonction
    var t = typeof p;
    // Otherwise do some more type checking
    if (t !== "object" && t !== "function") throw new TypeError();

    // On défini un prototype vide
    function F() {}

    // On applique p à ce prototype (héritage)
    F.prototype = p;

    // On crée un nouvel héritier de p, et on le retourne
    return new F();
}


/**
 * Modélisation d'un humain.
 *
 * Dans notre société, nous sommes bien souvent assimilables à des
 * robots... Nous allons donc étendre la classe Robot. Ainsi, un
 * Humain sera "une sorte" de Robot.
 *
 * @class Human
 * @extends Robot
 */
var Human = (function () {
    'use strict';

    // Le prototype des humains hérite du prototype des robots
    // Un humain sait donc marcher et parler
    Human.prototype = inherit(Robot.prototype);

    /**
     * Sexes possibles pour un humain
     * @property SEX
     * @static
     * @type Array
     */
    Human.SEX = ['MAN', 'WOMAN'];

    /**
     * Constructeur
     * @constructor
     * @param {String} name Nom de l'humain
     * @param {Number} age Age de l'humain
     */
    function Human(name, age) {
        this.age = age;

        // On appelle le constructeur de la classe mère afin de ne
        // pas avoir à réécrire du code (eg. this.name = name;)
        Robot.apply(this, arguments);
    }

    /**
    * Un humain peut boire (tandis que les robots ne peuvent pas car
    * ils rouilleraient...)
    * @method drink
    */
    Human.prototype.drink = function () {
        console.log('I am drinking');
    };

    /**
     * Les humains savent parler, mais ils sont plus intelligents que
     * les robots. Ils sont aussi plus bavards...
     *
     * On surcharge ici la méthode Robot.speak
     *
     * @method speak
     */
    Human.prototype.speak = function () {
        // Appel de la méthode de la classe mère
        Robot.prototype.speak.apply(this, arguments);

        // On ajoute un traitement spécifique après l'appel de la méthode héritée
        console.log('I am human and I am ' + this.age + ' years old.');
    };

    // La méthode Human.prototype.walk n'est pas définie. On hérite
    // simplement de celle de la classe mère, donc pas de surcharge.
    // En effet, un humain marche exactement comme un Robot, enfin en moins
    // saccadé quand même...

    // On pense à retouner le constructeur
    return Human;
}());


// ---
// Exemples d'utilisation

var corben = new Human('Corben', 38);
corben.speak();
corben.walk('south');
corben.walk('west');
corben.drink();
console.log(corben);

console.log('--- Fin fichier Human.js ------------------');

    (full-width)

Cookies Consent

This website uses cookies to ensure you get the best experience on our website.

Cookies Policy

We employ the use of cookies. By accessing Lantro UI, you agreed to use cookies in agreement with the Lantro UI's Privacy Policy.

Most interactive websites use cookies to let us retrieve the user’s details for each visit. Cookies are used by our website to enable the functionality of certain areas to make it easier for people visiting our website. Some of our affiliate/advertising partners may also use cookies.