tag:linuxfr.org,2005:/tags/singleton/publicLinuxFr.org : les contenus étiquetés avec « singleton »2016-03-10T14:53:48+01:00/favicon.pngtag:linuxfr.org,2005:Post/365952016-03-09T10:55:14+01:002016-03-09T12:27:15+01:00Singleton en Js<p>Bonjour,<br>
Tout d'abord, je poste ici car il n'y a apparemment aucun forum dédié Js, c'est dommage car on peut faire autre chose que tu web en Js il me semble.</p>
<p>Bref, Js, je débute, et pour être franc, ça me rebute un peu. Je trouve ce langage très difficile à appréhender, notamment par le manque de recommandations officielles et claires, mais passons. Et comme je débute, quoi de mieux que de commencer au début du langage.</p>
<p>Je me posais hier la question : mais comment pourrais je faire un singleton en Js. Une petite recherche sur Qwant (c'est aussi mon ami) et je tombe sur ce fil : <a href="http://stackoverflow.com/questions/1635800/javascript-best-singleton-pattern">http://stackoverflow.com/questions/1635800/javascript-best-singleton-pattern</a>. Ces codes sont assez moches, et horriblement long pour faire juste un singleton.</p>
<p>Alors, j'ai écris ce bout de code, qui me semble faire très bien l'affaire, j'explique en dessous.</p>
<pre><code class="js"><span class="s1">'use strict'</span><span class="p">;</span>
<span class="kd">var</span> <span class="nx">singleton</span> <span class="o">=</span> <span class="p">(</span><span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
<span class="kd">var</span> <span class="nx">counter</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">return</span> <span class="p">{</span>
<span class="nx">getName</span><span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
<span class="k">return</span> <span class="s2">"singleton"</span><span class="p">;</span>
<span class="p">},</span>
<span class="nx">getCounter</span><span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">counter</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">};</span>
<span class="p">})();</span></code></pre>
<p>Si j'ai bien tout codé et compris : c'est une fonctione anonyme, qui est immédiatement invoquée (IIFE dans le jargon) et qui retourne un objet qui possède 2 méthodes (getName et getCounter). Comme la méthode est anonyme, elle ne peut plus être exécutée par ailleurs, et comme elle est "auto-exécutée" une seule fois, mon objet "singleton" est unique. Notons que la fonction "getCounter" permet d'accéder à un membre privé, ici "counter". On a donc de l'encapsulation en plus.</p>
<p>J'ai bon ?? Merci de vos avis sur la question, partage d'info, etc.</p>
<p>PS : Je n'arrive à indenter la ligne "var counter = 0;" avec le l'étiquette "code" du forum, désolé.</p><div><a href="https://linuxfr.org/forums/programmationweb/posts/singleton-en-js.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/108416/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/programmationweb/posts/singleton-en-js#comments">ouvrir dans le navigateur</a>
</p>
romuhttps://linuxfr.org/nodes/108416/comments.atom