2
 40

Once

Objective
  • Once

Une classe Once ne crée qu'une seule instance.

  1. function Once() {
  2.     return this.constructor._instance || (this.constructor._instance = this);
  3. }

La fonction Once crée un objet dont le constructeur à une propriété _instance. Si _instance est undefined, Once garde l'objet créé this et le retourne. Sinon, Once retourne l'instance précédemment créée.

  1. Once.prototype = Object.create(Objective.prototype);

Initialise le prototype de la fonction Once avec une copie du prototype de la fonction Objective (héritage prototypal). La classe Once hérite de la classe Objective.

  1. Object.defineProperty(Once.prototype, 'constructor', { value: Once, enumerable: false, writable: true });

Renomme le constructeur.

Voir l'article L'héritage au sein de JavaScript sur le site MDN Web Docs.

  1. Once.prototype.clone = function() {
  2.     return this;
  3. };

Redéfinit la méthode clone héritée de la classe Objective.

Test
  1. <?php head('javascript', '/objectivejs/Objective.js'); ?>
  2. <?php head('javascript', '/objectivejs/Once.js'); ?>

Ajoute les balises <script src="/objectivejs/Objective.js"></script> et <script src="/objectivejs/Once.js"></script> à la section <head> du document HTML. head est une fonction d'iZend. Adaptez le code à votre environnement de développement.

  1. console.log(new Once() === new Once()); // true

Vérifie si les créations de 2 instances de Once renvoient le même objet.

  1. function Application(name) {
  2.     let app = Once.call(this);
  3.  
  4.     if (app === this)
  5.         this._name = name;
  6.  
  7.     return app;
  8. }
  9.  
  10. Application.prototype = Object.create(Once.prototype);
  11.  
  12. Object.defineProperty(Application.prototype, 'constructor', { value: Application, enumerable: false, writable: true });

Définit une classe Application qui hérite de la classe Once. Une instance d'Application a un nom.

IMPORTANT : La dernière instruction return app; retourne expressément l'instance unique retournée par le constructeur de la classe Once.

  1. let app1 = new Application('foobar');
  2. let app2 = new Application('barfoo');

Crée 2 instances d'Application avec des noms différents.

  1. console.log(app1.constructor.name); // Application
  2. console.log(app1 === app2);         // true
  3. console.log(app1._name);            // foobar

Affiche le nom du constructeur d'une instance d'Application. Vérifie qu'une seule instance d'Application a été créée et que son nom est bien celui passé en paramètre de la première instanciation.

  1. let app3 = app1.clone();
  2. console.log(app1 === app3);         // true

Vérifie que le clone d'une instance d'Application est l'instance d'origine.

Affichez la page générée par le fichier testOnce.phtml et vérifiez la trace dans la console du navigateur :

true
Application
true
foobar
true
VOIR AUSSI

Objective, Responder

Commentaires

Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].