IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Programmation orientée objet par prototype avec jQuery


précédentsommairesuivant

III. Accesseurs et mutateurs. Attribut et méthode statiques

Toutes ces possibilités existent déjà dans le système OOP.

Pour l'attribut this.numero :

  1. L'accesseur, getNumero(), est une méthode qui permet d'obtenir la valeur de l'attribut ;
  2. Le mutateur, setNumero(value), est une méthode qui permet de changer la valeur de l'attribut this.numero.

Une méthode (idem pour l'attribut) statique est une méthode qui est rattachée à la « fonction classe ». Exemples célèbres : Math.PI et Math.floor(value).

Utilisation d'un mutateur (poopj2.html)
Sélectionnez
try {
  var Personne = $.dvjhClass._create({
    _builder: function(prenom, nom, numero){
        this.prenom = prenom || "";
        this.nom = nom || "";
        this.setNumero(numero);
    },
    setNumero: function(value){
        var n = parseInt(value, 10);
        
        if (!isNaN(n) && n >= 100){
            this.numero = n;
        } else {
            throw("Erreur, numero est inférieur à 100");
        }
    },
    toString: function(){
        return "Personne : ";
    }
  });

  var dvjh = new Personne("Daniel", "Hagnoul", 999);

  console.log(dvjh);

  dvjh.setNumero(-1);
}
catch(err){
  alert(err);
}

Dans l'exemple précédent, le mutateur setNumero(value) teste la validité du numéro et déclenche une exception en cas d'erreur.

Le constructeur fait appel au mutateur, this.setNumero(numero), et l'attribut this.numero est créé dans le mutateur.

Même si cela fonctionne, le fait de ne pas déclarer tous les attributs d'instance dans le constructeur déconcertera le prochain utilisateur de la « fonction classe » poopj.

L'utilisation d'une méthode statique permet de déclarer l'attribut dans le constructeur.

Utilisation d'un mutateur et d'une méthode statique (poopj3.html)
Sélectionnez
try {
  var Personne = $.dvjhClass._create({
    _builder: function(prenom, nom, numero){
        this.prenom = prenom || "";
        this.nom = nom || "";
        this.numero = Personne.TestNumero(numero);
    },
    setNumero: function(value){
        this.numero = Personne.TestNumero(value);
    },
    toString: function(){
        return "Personne : ";
    }
  });

  /*
  * Méthode statique
  */
  Personne.TestNumero = function(value){
    var n = parseInt(value, 10);
    
    if (!isNaN(n) && n >= 100){
        return n;
    } else {
        throw("Erreur, numero est inférieur à 100");
      }
  };

  /*
   * Vous pouvez contrôler le contenu du prototype
   * de la fonction classe poopj.
   *
   * La méthode statique est extérieure au prototype.
   */
  console.log(Personne, Personne.prototype);

  var dvjh = new Personne("Daniel", "Hagnoul", 999);

  console.log(dvjh, dvjh.numero);

  dvjh.setNumero(-1);
}
catch(err){
  alert(err);
}

précédentsommairesuivant