Once
- Once
Une classe Once ne crée qu'une seule instance.
- function Once() {
- return this.constructor._instance || (this.constructor._instance = this);
- }
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.
- 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.
- 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.
- Once.prototype.clone = function() {
- return this;
- };
Redéfinit la méthode clone
héritée de la classe Objective.
Test
- <?php head('javascript', '/objectivejs/Objective.js'); ?>
- <?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.
- console.log(new Once() === new Once()); // true
Vérifie si les créations de 2 instances de Once renvoient le même objet.
- function Application(name) {
- let app = Once.call(this);
- if (app === this)
- this._name = name;
- return app;
- }
- Application.prototype = Object.create(Once.prototype);
- 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.
- let app1 = new Application('foobar');
- let app2 = new Application('barfoo');
Crée 2 instances d'Application avec des noms différents.
- console.log(app1.constructor.name); // Application
- console.log(app1 === app2); // true
- 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.
- let app3 = app1.clone();
- 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
Commentaires