<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Javascript Kata &#187; object-oriented</title>
	<atom:link href="http://www.javascriptkata.com/category/object-oriented/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.javascriptkata.com</link>
	<description>Advanced katas for javascripters</description>
	<lastBuildDate>Tue, 15 Jun 2010 14:21:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>How to write a singleton class in javascript</title>
		<link>http://www.javascriptkata.com/2009/09/30/how-to-write-a-singleton-class-in-javascript/</link>
		<comments>http://www.javascriptkata.com/2009/09/30/how-to-write-a-singleton-class-in-javascript/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 12:59:54 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[black belt]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[object-oriented]]></category>

		<guid isPermaLink="false">http://www.javascriptkata.com/?p=166</guid>
		<description><![CDATA[If I look at my stats, a lot of people are wondering how to write a singleton class. I already <a href="http://www.javascriptkata.com/2007/04/04/how-to-make-a-singleton/" target="_blank">wrote about it before</a> but my old solution exposed the instance of the class so more than one instance could be created thus making it not completly a singleton class.]]></description>
			<content:encoded><![CDATA[<p>If I look at my stats, a lot of people are wondering how to write a singleton class. I already <a href="http://www.javascriptkata.com/2007/04/04/how-to-make-a-singleton/" target="_blank">wrote about it before</a> but my old solution exposed the instance of the class so more than one instance could be created thus making it not completly a singleton class.</p>
<p>Here&#8217;s the new solution using a <a href="http://www.javascriptkata.com/2009/09/23/how-to-create-an-object-with-private-variables-and-methods/">private variable</a> for the instance.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> Cats<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> names = <span class="br0">&#91;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">this</span>.<span class="me1">singletonInstance</span> = <span class="kw2">null</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// Get the instance of the Cats class</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// If there&#8217;s none, instanciate one</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> getInstance = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!<span class="kw1">this</span>.<span class="me1">singletonInstance</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">singletonInstance</span> = createInstance<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="me1">singletonInstance</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="co1">// Create an instance of the Cats class</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> createInstance = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Here, you return all public methods and variables</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; add : <span class="kw2">function</span><span class="br0">&#40;</span><span class="kw3">name</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; names.<span class="me1">push</span><span class="br0">&#40;</span><span class="kw3">name</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="me1">names</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; names : <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> names;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> getInstance<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>How to use it</h3>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> run<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// Add a new cat</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> cat1 = <span class="kw2">new</span> Cats<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; cat1.<span class="me1">add</span><span class="br0">&#40;</span><span class="st0">&quot;Mistigri&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; jsKataEx.<span class="me1">assert</span><span class="br0">&#40;</span>cat1.<span class="me1">names</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span> == <span class="nu0">1</span>, <span class="st0">&quot;cat1 contains 1 cat : &quot;</span> + cat1.<span class="me1">names</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// Use another instance</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> cat2 = <span class="kw2">new</span> Cats<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; jsKataEx.<span class="me1">assert</span><span class="br0">&#40;</span>cat2.<span class="me1">names</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span> == <span class="nu0">1</span>, <span class="st0">&quot;cat2 contains Mistigri added in cat1 : &quot;</span> + cat2.<span class="me1">names</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// Add another cat in the other instance</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; cat2.<span class="me1">add</span><span class="br0">&#40;</span><span class="st0">&quot;Felix&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; jsKataEx.<span class="me1">assert</span><span class="br0">&#40;</span>cat2.<span class="me1">names</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span> == <span class="nu0">2</span>, <span class="st0">&quot;cat2 contains Mistigri and Felix&quot;</span> + cat2.<span class="me1">names</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; jsKataEx.<span class="me1">assert</span><span class="br0">&#40;</span>cat2.<span class="me1">names</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span> == <span class="nu0">2</span>, <span class="st0">&quot;cat1 also contains Mistigri and Felix&quot;</span> + cat1.<span class="me1">names</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Get the <a href="http://github.com/dsimard/jskata_examples/blob/master/singleton/singleton.js" target="_blank">code on GitHub</a> and see it <a href="http://dsimard.github.com/jskata_examples/singleton.html" target="_blank">live in action</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javascriptkata.com/2009/09/30/how-to-write-a-singleton-class-in-javascript/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How to create an object with private variables and methods</title>
		<link>http://www.javascriptkata.com/2009/09/23/how-to-create-an-object-with-private-variables-and-methods/</link>
		<comments>http://www.javascriptkata.com/2009/09/23/how-to-create-an-object-with-private-variables-and-methods/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 12:50:52 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[black belt]]></category>
		<category><![CDATA[object-oriented]]></category>

		<guid isPermaLink="false">http://www.javascriptkata.com/?p=128</guid>
		<description><![CDATA[In short, you can use private variables when you return another scope when declaring a class.]]></description>
			<content:encoded><![CDATA[<p>In short, you can use private variables when you return another scope when declaring a class.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> Cats<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> nameList = <span class="br0">&#91;</span><span class="br0">&#93;</span>; <span class="co1">// private var</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// This is where you define another scope!</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">return</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; add:<span class="kw2">function</span><span class="br0">&#40;</span><span class="kw3">name</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; nameList.<span class="me1">push</span><span class="br0">&#40;</span><span class="kw3">name</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>How does it work?</h3>
<p>The magic lies in creating a different scope at the end of the class definition that does not include private variables. Then, private members are <strong>available in this scope and not outside of it</strong>, thanks to the <a href="http://www.javascriptkata.com/2007/04/10/the-power-of-closures-in-javascript/" target="_blank">power of closures</a>.</p>
<h3>Differences between private and public</h3>
<p>These two classes definition shows the difference between the a class where all members are public versus a class where some members are private.</p>
<p>This is a class where <strong>all members are public</strong>.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> PublicCats<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// This is the list of cat names</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">this</span>.<span class="me1">nameList</span> = <span class="br0">&#91;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="co1">// This is a method that I would like to be private but can&#8217;t</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// It returns the last cat of the list</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">this</span>.<span class="me1">lastCat</span> = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="me1">nameList</span><span class="br0">&#91;</span><span class="kw1">this</span>.<span class="me1">nameList</span>.<span class="me1">length</span><span class="nu0">-1</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// Return the list of names</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">this</span>.<span class="me1">names</span> = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="me1">nameList</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// Add a name to the list</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">this</span>.<span class="me1">add</span> = <span class="kw2">function</span><span class="br0">&#40;</span><span class="kw3">name</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">nameList</span>.<span class="me1">push</span><span class="br0">&#40;</span><span class="kw3">name</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="co1">// Return the last cat just added</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="me1">lastCat</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>This is the corresponding class where <strong>some members are private</strong>.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> PrivateCats<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// This is the list of cat names</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> nameList = <span class="br0">&#91;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="co1">// This is a private method</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> lastCat = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Note : I don&#8217;t use &quot;this&quot; to access private variables</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// thanks to the power of closures!</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> nameList<span class="br0">&#91;</span>nameList.<span class="me1">length</span><span class="nu0">-1</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// These are our public methods!</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// This is where we create another scope to</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// avoid external objects to use the private variables.</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">return</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; add:<span class="kw2">function</span><span class="br0">&#40;</span><span class="kw3">name</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// Note : once again, I don&#8217;t use &quot;this&quot; </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// to access the private variables and methods</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; nameList.<span class="me1">push</span><span class="br0">&#40;</span><span class="kw3">name</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> lastCat<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; names:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> nameList;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="br0">&#125;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>In the above code, line 15 makes all the difference between the two classes.</p>
<h3>On GitHub</h3>
<p>Get all the <a href="http://github.com/dsimard/jskata_examples/blob/master/private/private.js">code on GitHub</a> and see it live in action on <a href="http://dsimard.github.com/jskata_examples/private.html">my GitHub page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javascriptkata.com/2009/09/23/how-to-create-an-object-with-private-variables-and-methods/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Ask Dan : Procedural VS object-oriented in javascript</title>
		<link>http://www.javascriptkata.com/2007/06/06/ask-dan-procedural-vs-object-oriented-in-javascript/</link>
		<comments>http://www.javascriptkata.com/2007/06/06/ask-dan-procedural-vs-object-oriented-in-javascript/#comments</comments>
		<pubDate>Wed, 06 Jun 2007 13:27:21 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Ask Dan a javascript question]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[object-oriented]]></category>
		<category><![CDATA[white belt]]></category>

		<guid isPermaLink="false">http://javascriptkata.timmyontime.com/?p=46</guid>
		<description><![CDATA[Since the beginning of Ask Dan a javascript question, I received a bunch of questions. Here&#8217;s the first one I received. It&#8217;s from Andrew Worcester. There seems (to me anyway) to be an overuse of the &#8220;new&#8221; syntax in libraries. If I create an Ajax object is there a functional benefit to using: &#8220;new Ajax.Request(options)&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Since the beginning of <a href="http://www.javascriptkata.com/2007/06/01/ask-dan-a-javascript-question-first-edition/" title="Ask Dan a javascript question">Ask Dan a javascript question</a>, I received a bunch of questions. Here&#8217;s the first one I received. It&#8217;s from <a href="http://amwmedia.com/" target="_blank" title="Andrew Worcester">Andrew Worcester</a>.</p>
<blockquote><p>There seems (to me anyway) to be an overuse of the &#8220;new&#8221; syntax in libraries. If I create an Ajax object is there a functional benefit to using: &#8220;new Ajax.Request(options)&#8221; verses something like &#8220;sendAjaxRequest(options)&#8221; It seems to me that by using &#8220;new&#8221; causes more hassle because you need to be sure the objects are properly disposed of. So is there a performance or functional benefit to this technique?</p></blockquote>
<p>I had a hard time understanding the question (and I was too ass hole to ask&#8230;) so I&#8217;ll rephrase it in another way : <em>is there a benefit from using </em><em>object-oriented techniques </em><em>VS </em><em>procedural</em><em> in javascript?</em></p>
<h3>   Procedural in javascript</h3>
<p>Though javascript was not a procedural language from the start, it has been overused as such in the beginning (and it&#8217;s still is). That may be because people didn&#8217;t bother learning javascript and they copy/pasted functions from sites that offers low-quality javascript snippet. All they did was &#8220;hacking&#8221; the poorly written code to suit their needs. This technique worked for a long time but with the use of ajax and DHTML, it&#8217;s nearly impossible to have clean code that is not buggy and dirty.</p>
<h3>   Object-oriented in javascript</h3>
<p>The <em>new</em> statement necessary implies the use of objects in javascript. You can have basic information about object in <a href="http://http//www.javascriptkata.com/2007/03/23/how-to-create-objects-in-object-oriented-javascript/" title="How to create objects in object-oriented javascript">How to create objects in object-oriented javascript</a> and in with the <a href="http://www.javascriptkata.com/category/object-oriented/" title="articles tagged Object-oriented">articles tagged Object-oriented</a> of this site.</p>
<h3>   The benefit of object-oriented</h3>
<p>There is one major benefit about object-oriented that creates a lot of other benefits : <strong>the cleanliness of the code</strong>. The other benefits from that are : the code is easier to maintain, to modify, to read and to explain.</p>
<h3>OO applied</h3>
<p>I&#8217;ll apply it to an example. I want to alert the sound of cat by ajax.</p>
<p>In a <strong>procedural way</strong>, you&#8217;ll approximatively have</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// Global variable</span></div>
</li>
<li class="li1">
<div class="de1">ajaxRequest = <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> sendCatSoundAjaxRequest<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">ajaxRequest = <span class="kw2">new</span> XMLHttpRequest<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">// Create the request in the global var</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// &#8230; code for request &#8230;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> receiveCatSoundAjaxRequest<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1">// The sound is in clear text in the response</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">alert</span><span class="br0">&#40;</span>ajaxRequest.<span class="me1">responseText</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>The problems?</strong> You have a global variable to keep track of the ajax request. Because it could be use by every other functions that need ajax, you can&#8217;t make more than one request at a time. Also, there are nothing that binds the two methods together apart their names that are look alike. Now, just think of the code when you have 5 or 6 different type of requests. Your code will look like garbage.</p>
<p>In a <strong>object-oriented</strong> way, you would all write this ugly code in a separated object. Your main call to see the sound of a cat could be something like</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> cat = <span class="kw2">new</span> Cat<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">alert</span><span class="br0">&#40;</span>cat.<span class="me1">getSound</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>The code from above still exists somewhere but the complexity is now hidden behind the <em>Cat</em> class.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javascriptkata.com/2007/06/06/ask-dan-procedural-vs-object-oriented-in-javascript/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How to inherit classes in javascript</title>
		<link>http://www.javascriptkata.com/2007/05/22/how-to-inherit-classes-in-javascript/</link>
		<comments>http://www.javascriptkata.com/2007/05/22/how-to-inherit-classes-in-javascript/#comments</comments>
		<pubDate>Tue, 22 May 2007 15:36:23 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[object-oriented]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[white belt]]></category>

		<guid isPermaLink="false">http://javascriptkata.timmyontime.com/?p=41</guid>
		<description><![CDATA[First of all, since I made the front page of Ajaxian, a lot of new readers joined in. Welcome to all of you. I would also take a moment to explain that Javascript Kata is a technical blog about javascript and though I will talk here and there about ajax, it is not focused on [...]]]></description>
			<content:encoded><![CDATA[<p>First of all, since I made the front page of <a href="http://ajaxian.com/" title="Ajaxian" target="_blank">Ajaxian</a>, a lot of new readers joined in. Welcome to all of you. I would also take a moment to explain that Javascript Kata is a technical blog about javascript and though I will talk here and there about ajax, it is not focused on that subject. It is more about the good javascript techniques that should come along with all the ajax you have to do. I update this site 2 or 3 times a week. Keep reading!</p>
<p>There are hundreds of ways to do inheritance in javascript but a single one is <span style="font-weight: bold">simpler, cleanier and prettier</span> than all the other ones.</p>
<p><span style="font-style: italic">Note!<br />
Before reading this article, you should take a look at </span><a href="http://www.javascriptkata.com/2007/03/23/how-to-create-objects-in-object-oriented-javascript/" title="How to create objects in object-oriented javascript">How to create objects in object-oriented javascript</a><span style="font-style: italic">.<br />
</span></p>
<h3>A one-liner</h3>
<p>To inherit a class in javascript, it&#8217;s a one-liner</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">TheSubClass.<span class="me1">prototype</span> = <span class="kw2">new</span> TheParentClass<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>As simple as that!</p>
<h3>Where to write the one-liner</h3>
<p>The problem with that one-liner is <span style="font-weight: bold">where should it goes?</span> Once again, the answer is simple : <span style="font-weight: bold">after the constructor of the sub-class</span>. It may look strange but it is extremely effective.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/* The constructor of the Mammal class */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> Mammal<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">/* The constructor of the Cat class */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> Cat<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// The magic that inherits Cat from Mammal is here!!!!!</span></div>
</li>
<li class="li1">
<div class="de1">Cat.<span class="me1">prototype</span> = <span class="kw2">new</span> Mammal<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<h3>Is this true inheritance?</h3>
<p>In the hundreds of other ways of inheriting classes in javascript, I think that this is the only one that is a true inheritance. What do I mean by true inheritance? I mean that javascript recognizes it as a sub-class of the class. Check this out!</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/* Above code goes here */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Create a cat</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> theCat = <span class="kw2">new</span> Cat<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Check if the cat is an instance of the Cat class</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span>theCat <span class="kw1">instanceof</span> Cat<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;theCat is an instance of the Cat class&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Check if the cat is an instance of the Mammal class</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span>theCat <span class="kw1">instanceof</span> Mammal<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;theCat is an instance of the Mammal class&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>If you execute this code, you&#8217;ll see that the cat is an instance of the <span style="font-style: italic">Cat</span> class and the <span style="font-style: italic">Mammal</span> class.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javascriptkata.com/2007/05/22/how-to-inherit-classes-in-javascript/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>How to use the self with object-oriented javascript and closures</title>
		<link>http://www.javascriptkata.com/2007/05/14/how-to-use-the-self-with-object-oriented-javascript-and-closures/</link>
		<comments>http://www.javascriptkata.com/2007/05/14/how-to-use-the-self-with-object-oriented-javascript-and-closures/#comments</comments>
		<pubDate>Mon, 14 May 2007 13:55:39 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[object-oriented]]></category>
		<category><![CDATA[white belt]]></category>

		<guid isPermaLink="false">http://javascriptkata.timmyontime.com/?p=39</guid>
		<description><![CDATA[When I began with object-oriented javascript, I always saw a self here and there without fully understanding what it meant. Self? When you see self in some object-oriented javascript, it&#8217;s just mean that the developer is using a closure that will reference the current object via a variable named self. Because self is a variable, [...]]]></description>
			<content:encoded><![CDATA[<p>When I began with object-oriented javascript, I always saw a <span style="font-style: italic">self</span> here and there without fully understanding what it meant.</p>
<h3>Self?</h3>
<p>When you see <span style="font-style: italic">self</span> in some object-oriented javascript, it&#8217;s just mean that <span style="font-weight: bold">the developer is using a closure that will reference the current object via a variable named <span style="font-style: italic">self</span></span>. Because <span style="font-style: italic">self</span> is a variable, it could be named anything else. The use of &#8220;self&#8221; as a name is a unwritten convention but it could be whatever you want.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// Create a cat</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> Cat<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">theCatName</span> = <span class="st0">&quot;Mistigri&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// The cat will meow later</span></div>
</li>
<li class="li1">
<div class="de1">Cat.<span class="me1">prototype</span>.<span class="me1">meowLater</span> = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// I create the variable self that refers to the this (the current object)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> self = <span class="kw1">this</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// I create a timeout that calls the self.meow function within an anonymous function</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="coMULTI">/*** NOTE : You don&#8217;t always have to create an anonymous function it&#8217;s just that in</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; this case, it is required ***/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; window.<span class="me1">setTimeout</span><span class="br0">&#40;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.<span class="me1">meow</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; , <span class="nu0">1000</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// The cat meows</span></div>
</li>
<li class="li1">
<div class="de1">Cat.<span class="me1">prototype</span>.<span class="me1">meow</span> = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// I can use the this expression!!!</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">theCatName</span> + <span class="st0">&quot; : meow!&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// I crate an object and call the meowLater() function</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> theCat = <span class="kw2">new</span> Cat<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">theCat.<span class="me1">meowLater</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<h3>Why not use the <span style="font-style: italic">this</span>?</h3>
<p>Because when using closures within an object, the <span style="font-style: italic">this</span> in the called function (in the above example, in the <span style="font-style: italic">meow()</span> function) is the <a href="http://www.w3schools.com/htmldom/dom_obj_window.asp" title="window object" target="_blank">window object</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javascriptkata.com/2007/05/14/how-to-use-the-self-with-object-oriented-javascript-and-closures/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>How to make a singleton in javascript</title>
		<link>http://www.javascriptkata.com/2007/04/04/how-to-make-a-singleton/</link>
		<comments>http://www.javascriptkata.com/2007/04/04/how-to-make-a-singleton/#comments</comments>
		<pubDate>Wed, 04 Apr 2007 14:53:12 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[black belt]]></category>
		<category><![CDATA[object-oriented]]></category>

		<guid isPermaLink="false">http://javascriptkata.timmyontime.com/?p=21</guid>
		<description><![CDATA[[UPDATE : This post is outdated. Check out the new post on singletons.] Singleton is one of the most common and easiest design pattern. In fact, a lot of designs are wrong just because the developer didn&#8217;t know about singletons and design patterns (I could have said : a lot of my designs were wrong [...]]]></description>
			<content:encoded><![CDATA[<div style="color:red;font-weight:bold;margin-bottom:1em;">[UPDATE : This post is outdated. Check out the <a href="http://www.javascriptkata.com/2009/09/30/how-to-write-a-singleton-class-in-javascript/">new post on singletons</a>.]</div>
<p><a href="http://www.dofactory.com/Patterns/PatternSingleton.aspx#_self1" title="Singleton">Singleton</a> is one of the most common and easiest <a href="http://www.dofactory.com/Patterns/Patterns.aspx" title="design pattern">design pattern</a>. In fact, a lot of designs are wrong just because the developer didn&#8217;t know about singletons and design patterns (I could have said : a lot of <span style="font-style: italic">my</span> designs were wrong just because <span style="font-style: italic">I</span> didn&#8217;t know about singletons and design patterns).</p>
<p>I was looking at the first three results for <a href="http://www.google.com/search?q=singleton+javascript" title="singleton javascript" target="blank_">singleton javascript</a> on Google and I was more than deceived by what they had to tell us. That&#8217;s why I write this article.</p>
<h3>What is a singleton class?</h3>
<p>A singleton is when your application needs to use just one instance of an object to centralize your access to it. Example, I have a list of cat names that can be used in various functions of an application. Sometimes, names are added or removed. I could use a global variable to the page containing the list. The problems are :</p>
<p>- It&#8217;s a global variable (global variables are bad).<br />
- I don&#8217;t know when the list is created or initialized.<br />
- If you reuse your class in another project, you will always need to define a global variable and instance it correctly.<br />
- It&#8217;s ugly.</p>
<p>If I use a singleton pattern, the advantages are :</p>
<p>- The object is always correctly created.<br />
- You don&#8217;t have to ask yourself questions about the state of the list or whatever. It just works!<br />
- Another programmer can recognize the singleton pattern thus making it easier for him to work.</p>
<h3>How to write a singleton class</h3>
<p>Before writing a singleton, you need to know about <a href="http://www.javascriptkata.com/2007/03/23/how-to-create-objects-in-object-oriented-javascript/" title="creating objects">creating objects</a> and <a href="http://www.javascriptkata.com/2007/03/26/how-to-do-class-functions-in-javascript-aka-static-or-shared-functions/" title="static functions">static functions</a>.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// I create the class</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> CatNames<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">names</span> = <span class="kw2">new</span> Array<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">// The array that will contain the names</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">CatNames.<span class="me1">instance</span> = <span class="kw2">null</span>; <span class="co1">// Will contain the one and only instance of the class</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// This function ensures that I always use the same instance of the object</span></div>
</li>
<li class="li1">
<div class="de1">CatNames.<span class="me1">getInstance</span> = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>CatNames.<span class="me1">instance</span> == <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CatNames.<span class="me1">instance</span> = <span class="kw2">new</span> CatNames<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> CatNames.<span class="me1">instance</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Function to add a cat name</span></div>
</li>
<li class="li1">
<div class="de1">CatNames.<span class="me1">prototype</span>.<span class="me1">add</span> = <span class="kw2">function</span><span class="br0">&#40;</span>catName<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">names</span>.<span class="me1">push</span><span class="br0">&#40;</span>catName<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Function to remove the last cat name</span></div>
</li>
<li class="li1">
<div class="de1">CatNames.<span class="me1">prototype</span>.<span class="me1">removeLast</span> = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="me1">names</span>.<span class="me1">pop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Function to alert all cat names</span></div>
</li>
<li class="li1">
<div class="de1">CatNames.<span class="me1">prototype</span>.<span class="me1">alertAllCats</span> = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">names</span>.<span class="me1">join</span><span class="br0">&#40;</span><span class="st0">&quot;,&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>I use it in these functions.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> addThreeNames<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// I use the one and only instance of the class (the magic of singletons)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> names = CatNames.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; names.<span class="me1">add</span><span class="br0">&#40;</span><span class="st0">&quot;Mistigri&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; names.<span class="me1">add</span><span class="br0">&#40;</span><span class="st0">&quot;Bibi&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; names.<span class="me1">add</span><span class="br0">&#40;</span><span class="st0">&quot;Gary&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">function</span> removeLastCat<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Once again, singleton is here</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> names = CatNames.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; names.<span class="me1">removeLast</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// I call the functions</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// &#8211; no need for a global variable</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// &#8211; no need to create the object and pass it as parameter</span></div>
</li>
<li class="li2">
<div class="de2">addThreeNames<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">removeLastCat<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Alert all cats</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> names = CatNames.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">names.<span class="me1">alertAllCats</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<h3>The downside of this technique</h3>
<p>Yes I know, you can instantiate the singleton class if you want.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> catNames = <span class="kw2">new</span> CatNames<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>You know what? You&#8217;ll have to follow a simple rule : <span style="font-weight: bold">never instantiate a singleton class</span>. Maybe we could use more techniques that would protect you from instantiating your own singleton class but it would be a waste of time and code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javascriptkata.com/2007/04/04/how-to-make-a-singleton/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Looping through object properties and hash tables using the &#8220;in&#8221; statement</title>
		<link>http://www.javascriptkata.com/2007/04/01/looping-through-object-properties-and-hash-tables-using-the-in-statement/</link>
		<comments>http://www.javascriptkata.com/2007/04/01/looping-through-object-properties-and-hash-tables-using-the-in-statement/#comments</comments>
		<pubDate>Mon, 02 Apr 2007 02:02:26 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[black belt]]></category>
		<category><![CDATA[object-oriented]]></category>

		<guid isPermaLink="false">http://javascriptkata.timmyontime.com/?p=19</guid>
		<description><![CDATA[As I said earlier, objects are hash tables of properties and functions so looping throught them is done the same way (weepee!). The &#8220;in&#8221; statement The in statement must be used in a for loop. Like this : for (var element in allElements). In most of the other languages, the element variable would contain the [...]]]></description>
			<content:encoded><![CDATA[<p>As I said earlier, <a href="/2007/03/29/how-to-use-javascript-hashes/" title="objects are hash tables of properties and functions">objects are hash tables of properties and functions</a> so looping throught them is done the same way (weepee!).</p>
<h3>The &#8220;in&#8221; statement</h3>
<p>The <span style="font-style: italic">in</span> statement must be used in a <span style="font-style: italic">for</span> loop. Like this : <span style="font-style: italic">for (var element in allElements)</span>. In most of the other languages, the <span style="font-style: italic">element</span> variable would contain the complete element but in javascript, <span style="font-weight: bold">it contains the name that refers to the complete element</span>.</p>
<h3>Looping through a hash table</h3>
<p>Before doing it, maybe you should take a look at <a href="/2007/03/29/how-to-use-javascript-hashes/" title="How to use javascript hashes (or hash-table)">How to use javascript hashes (or hash-table)</a> to make sure you fully understand what are javascript hash tables.</p>
<p>[source:javascript]</p>
<p>// I create a hash table<br />
var hashPetNames = new Object();</p>
<p>// I create the pets<br />
hashPetNames["cat"] = &#8220;Mistigri&#8221;;<br />
hashPetNames["dog"] = &#8220;Rex&#8221;;<br />
hashPetNames["bird"] = &#8220;Bibi&#8221;;</p>
<p>// I loop using the &#8220;in&#8221; statement<br />
for (var name in hashPetNames) {<br />
	alert(&#8220;My &#8221; + name + &#8220;&#8216;s name is &#8221; + hashPetNames[name]);<br />
}</p>
<p>[/source]</p>
<p>Run this code and you should see the alerts :<br />
- My <span style="font-style: italic">cat</span>&#8216;s name is <span style="font-style: italic">Mistigri</span>.<br />
- My <span style="font-style: italic">dog</span>&#8216;s name is <span style="font-style: italic">Rex</span>.<br />
- My <span style="font-style: italic">bird</span>&#8216;s name is <span style="font-style: italic">Bibi</span>.</p>
<p>So easy.</p>
<h3>Looping through an object</h3>
<p>This one is a little kinkier. Why would I want to loop through an object properties and methods? I can&#8217;t give you an answer. It&#8217;s up to you to find it. I&#8217;ve used it a couple of times so it&#8217;s not as useless as you could think.</p>
<p>Example, I would like to separatly alert all the properties and methods of an object.</p>
<p>[source:javascript]</p>
<p>// Create the class<br />
function TheClass() {<br />
	this.name = &#8220;The class&#8221;;<br />
	this.fullName = &#8220;The full name of the class&#8221;;<br />
	this.age = &#8220;51&#8243;;<br />
}</p>
<p>// Add a function<br />
TheClass.prototype.alertClass = function() {<br />
	alert(this.name + &#8221; &#8221; + this.fullName + this.Age);<br />
}</p>
<p>// Construct the object<br />
var theObject = new TheClass();</p>
<p>// Loop through the properties/functions<br />
var properties = &#8220;&#8221;;<br />
for (var propertyName in theObject) {<br />
	// Check if it&#8217;s NOT a function<br />
	if (!(theObject[propertyName] instanceof Function)) {<br />
		properties += propertyName + &#8220;, &#8220;;<br />
	}<br />
}</p>
<p>alert(&#8220;Properties : &#8221; + properties);</p>
<p>// Loop through the properties/functions<br />
var functions = &#8220;&#8221;;<br />
for (var functionName in theObject) {<br />
	// Check if it&#8217;s a function<br />
	if (theObject[functionName] instanceof Function) {<br />
		functions += functionName + &#8220;, &#8220;;<br />
	}<br />
}</p>
<p>alert(&#8220;Functions : &#8221; + functions);</p>
<p>[/source]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javascriptkata.com/2007/04/01/looping-through-object-properties-and-hash-tables-using-the-in-statement/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How to write constants in javascript</title>
		<link>http://www.javascriptkata.com/2007/03/28/how-to-write-constants-in-javascript/</link>
		<comments>http://www.javascriptkata.com/2007/03/28/how-to-write-constants-in-javascript/#comments</comments>
		<pubDate>Wed, 28 Mar 2007 15:20:14 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[object-oriented]]></category>
		<category><![CDATA[white belt]]></category>

		<guid isPermaLink="false">http://javascriptkata.timmyontime.com/?p=17</guid>
		<description><![CDATA[YOU CAN&#8217;T. As simple as that. Anyway, what is a constant? A constant is a unchangeable variable that throws an error when you try to write in it. Thus, implementing constant in javascript would be against its will to be opened. The magic of javascript resides in the liberty it gives you to change anything [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-weight: bold">YOU CAN&#8217;T</span>. As simple as that. Anyway, what is a constant? A constant is a <span style="font-style: italic">unchangeable variable that throws an error when you try to write in it</span>. Thus, implementing constant in javascript would be against its will to be opened. The magic of javascript resides in the liberty it gives you to change <a href="http://www.javascriptkata.com/2007/03/21/how-to-extend-javascript-classes/" title="anything you want">anything you want</a>, anywhere you want. Even if you&#8217;re not the owner of the object. Even if it&#8217;s a javascript intrinsic class. Why would you want to have constants???</p>
<p>Still, everyone wants to use constants (myself included). Here are a couple of ways of doing it without actually doing &#8220;it&#8221;.</p>
<h3>Global constants</h3>
<p>Ouch! That one hurts! As I <a href="http://www.javascriptkata.com/2007/03/19/5-reasons-to-write-object-oriented-oo-javascript/" title="said earlier">said earlier</a>, global variables are prohibited since 1992 by GVIP (<span style="font-weight: bold">G</span>lobal <span style="font-weight: bold">V</span>ariables <span style="font-weight: bold">I</span>nternational <span style="font-weight: bold">P</span>olice). But sometimes, a man gotta do what a man gotta do. If you really can&#8217;t find any better solution, use this one.</p>
<p>[source:javascript]<br />
var DISPLAY_TYPE_SMALL = 0;<br />
var DISPLAY_TYPE_BIG = 1;<br />
[/source]</p>
<h3>Class constant</h3>
<p>If you already know <a href="http://www.javascriptkata.com/2007/03/23/how-to-create-objects-in-object-oriented-javascript/" title="how to create objects">how to create objects</a> you have to use the <a href="http://www.javascriptkata.com/2007/03/26/how-to-do-class-functions-in-javascript-aka-static-or-shared-functions/" title="class functions technique (also knows as static or shared functions)">class functions technique (also knows as static or shared functions)</a> to create a class &#8220;constant&#8221;.</p>
<p>[source:javascript]<br />
// Create the class<br />
function TheClass() {<br />
}</p>
<p>// Create the class constant<br />
TheClass.THE_CONSTANT = 42;</p>
<p>// Create a function for TheClass to alert the constant<br />
TheClass.prototype.alertConstant = function() {<br />
	// You can&#8217;t access it using this.THE_CONSTANT;<br />
	alert(TheClass.THE_CONSTANT);<br />
}</p>
<p>// Alert the class constant from outside<br />
alert(TheClass.THE_CONSTANT);</p>
<p>// Alert the class constant from inside<br />
var theObject = new TheClass();<br />
theObject.alertConstant();<br />
[/source]</p>
<p>As you saw, you can&#8217;t access the constant using the <span style="font-style: italic">this</span> variable (a reference to the current object) because the <span style="font-weight: bold">constant is defined on the class only and not the object</span>.</p>
<h3>Class enum</h3>
<p>Sometimes, constants are not enough. You need to regroup them to be more logical. Example? I have three different display type : small, medium, big. I could do this</p>
<p>[source:javascript]<br />
// Create the class<br />
function TheClass() {<br />
	// Initialize the display type to big<br />
	this.displayType = TheClass.DISPLAY_TYPE_BIG;<br />
}</p>
<p>// Create constants<br />
TheClass.DISPLAY_TYPE_SMALL = 0;<br />
TheClass.DISPLAY_TYPE_MEDIUM = 1;<br />
TheClass.DISPLAY_TYPE_BIG = 2;</p>
<p>// Assign the small display type to the object<br />
var theObject = new TheClass();<br />
theObject.displayType = TheClass.DISPLAY_TYPE_SMALL;<br />
[/source]</p>
<p>It works but they are not logically grouped. I would prefer to use an enumeration (enum) [<a href="http://www.javascriptkata.com/2007/03/22/how-to-do-enumerations-enum-in-javascript/" title="more info about enum">more info about enum</a>].</p>
<p>[source:javascript]<br />
// Create the class<br />
function TheClass() {<br />
	// Initialize the display type to big<br />
	this.displayType = TheClass.DISPLAY_TYPE.big;<br />
}</p>
<p>TheClass.DISPLAY_TYPE = {<br />
small : 0,<br />
medium : 1,<br />
big : 2<br />
}</p>
<p>// Assign the small display type to the object<br />
var theObject = new TheClass();<br />
theObject.displayType = TheClass.DISPLAY_TYPE.small;<br />
[/source]</p>
<p>This is what I call beautiful code.</p>
<h3>One simple rule</h3>
<p>Knowing that there&#8217;s no mechanism that prevents you from modifying your &#8220;constants&#8221;, follow that simple law : <span style="font-weight: bold">don&#8217;t modify your constants</span>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javascriptkata.com/2007/03/28/how-to-write-constants-in-javascript/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>How to do class functions in javascript (aka static or shared functions)</title>
		<link>http://www.javascriptkata.com/2007/03/26/how-to-do-class-functions-in-javascript-aka-static-or-shared-functions/</link>
		<comments>http://www.javascriptkata.com/2007/03/26/how-to-do-class-functions-in-javascript-aka-static-or-shared-functions/#comments</comments>
		<pubDate>Mon, 26 Mar 2007 12:02:43 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[black belt]]></category>
		<category><![CDATA[object-oriented]]></category>

		<guid isPermaLink="false">http://javascriptkata.timmyontime.com/?p=13</guid>
		<description><![CDATA[One of the really concept of the object-oriented programming is the class functions but they are also known as static functions (Java, php, C++) or shared functions (.NET). Why using class method? Class methods help you keeping your code clean by centralizing your functions. Example, you create a calendar object that formats a string from [...]]]></description>
			<content:encoded><![CDATA[<p>One of the really concept of the object-oriented programming is the <span style="font-style: italic">class functions</span> but they are also known as <span style="font-style: italic">static functions</span> (Java, php, C++) or <span style="font-style: italic">shared functions</span> (.NET).</p>
<h3>Why using class method?</h3>
<p>Class methods help you <span style="font-weight: bold">keeping your code clean</span> by centralizing your functions. Example, you create a calendar object that formats a string from two dates to have readable time difference (example, input : &#8220;2007-08-13&#8243; and &#8220;2007-08-16&#8243;, output : &#8220;begins august 13th 2007 and ends 3 days later&#8221;).</p>
<p>Sure you can create a <span style="font-style: italic">readableTime(beginDate, endDate)</span> function. First problem is that there may be another function with that name. Second problem? If another programmer works on the code that makes a call to <span style="font-style: italic">readableTime</span> function, how does he knows that it comes from the javascript file containing the<span style="font-style: italic"> Calendar</span> object?</p>
<p>So, you could create a <span style="font-style: italic">Calendar_readableTime(beginDate, endDate)</span> function. Great! But what if the object name <span style="font-style: italic">Calendar</span> changes for <span style="font-style: italic">BestCalendar</span>? The <span style="font-style: italic">Calendar_readableTime</span> function won&#8217;t have the good suffix.</p>
<p><span style="font-weight: bold">The solution </span>is to use a <span style="font-style: italic">class function</span> so the call to the <span style="font-style: italic">readableTime</span> function will look like this : <span style="font-style: italic">Calendar.readableTime(beginDate, endDate)</span>. Nice looking and clean code.</p>
<h3>How to create a class function</h3>
<p>First, you create a class</p>
<p>[source:javascript]<br />
function Calendar() {<br />
}<br />
[/source]</p>
<p>Second, you add the class function</p>
<p>[source:javascript]<br />
function Calendar() {<br />
}</p>
<p>Calendar.readableTime = function() {<br />
// Code here<br />
}<br />
[/source]</p>
<p>Then, it&#8217;s ready to be called in your code</p>
<p>[source:javascript]<br />
var cal = new Calendar();<br />
var beginDate = new Date();<br />
var endDate = new Date();<br />
endDate.setDate(endDate.getDate() + 3); // Add three days to endDate</p>
<p>var stringTime = Calendar.readableTime(beginDate, endDate);<br />
[/source]</p>
<h3>Difference with other languages</h3>
<p>In many other languages, your class functions are callable from an instantiated object like this.</p>
<p>[source:javascript]<br />
var cal = new Calendar();<br />
var beginDate = new Date();<br />
var endDate = new Date();<br />
endDate.setDate(endDate.getDate() + 3); // Add three days to endDate</p>
<p>// I call cal.readableTime and it doesn&#8217;t work!<br />
var stringTime = cal.readableTime(beginDate, endDate);<br />
[/source]</p>
<p>In javascript, <span style="font-weight: bold">it doesn&#8217;t work</span> because the function <span style="font-style: italic">readableTime</span> is <span style="font-weight: bold">assigned to the class only </span>and is not referenced in the instances of the class.</p>
<p>To give the access to the <span style="font-style: italic">readableTime</span> function on the instance of an object is to create the function this way :</p>
<p>[source:javascript]<br />
function Calendar() {<br />
}</p>
<p>Calendar.readableTime = new function() {<br />
// Code here<br />
}</p>
<p>// Here&#8217;s the magic<br />
Calendar.prototype.readableTime = Calendar.readableTime;<br />
[/source]</p>
<p>By assigning the function to the <a href="http://www.javascriptkata.com/2007/03/25/what-are-javascript-prototypes-longer-answer/" title="prototype">prototype</a>, each object of the <span style="font-style: italic">Calendar</span> type will have the <span style="font-style: italic">readableTime</span> function.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javascriptkata.com/2007/03/26/how-to-do-class-functions-in-javascript-aka-static-or-shared-functions/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to create objects in object-oriented javascript</title>
		<link>http://www.javascriptkata.com/2007/03/23/how-to-create-objects-in-object-oriented-javascript/</link>
		<comments>http://www.javascriptkata.com/2007/03/23/how-to-create-objects-in-object-oriented-javascript/#comments</comments>
		<pubDate>Fri, 23 Mar 2007 12:25:30 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[object-oriented]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[white belt]]></category>

		<guid isPermaLink="false">http://javascriptkata.timmyontime.com/?p=11</guid>
		<description><![CDATA[[UPDATE : This post is outdated. Check out the new post on how to create objects.] Javascript is a functional programming language thus having no &#8220;real&#8221; objects. You can write it the way you want : procedural spag, functional, object or whatever word you know. Why should I write it object-oriented? Because, OO has proven [...]]]></description>
			<content:encoded><![CDATA[<p><strong style="color:red;">[UPDATE : This post is outdated. Check out the new post on <a href="http://www.javascriptkata.com/2009/09/23/how-to-create-an-object-with-private-variables-and-methods/">how to create objects</a>.]</strong></p>
<p>Javascript is a functional programming language thus having no &#8220;real&#8221; objects. You can write it the way you want : procedural spag, functional, object or whatever word you know. <span style="font-weight: bold">Why should I write it object-oriented?</span> Because, OO has proven many times its ease of use and great encapsulation. In this paper, I won&#8217;t talk about <a href="http://www.javascriptkata.com/2007/03/19/5-reasons-to-write-object-oriented-oo-javascript/"><span style="font-weight: bold">why</span></a> but about <span style="font-weight: bold">how</span>.</p>
<p>There are hundreds of way of writing OO javascript, I tried a lot of the most commons and I finally adopted one : oo using prototypes.</p>
<h3>1. Creating an empty class</h3>
<p>I like cats so here&#8217;s a complete example for a cat that meows.</p>
<p>First, I create an empty class.</p>
<p>[source:javascript]<br />
function Cat() {<br />
}<br />
[/source]</p>
<p>Hmmmm&#8230; that looks a lot like a function. In fact, it&#8217;s a function. <span style="font-weight: bold">Why classes are function? </span>Because javascript is a functional language. More on that later (maybe).</p>
<h3>2. Creating the constructor</h3>
<p>When I have a cat that meows, I want to see its name. I add a name property that is initialized in the constructor of the class.</p>
<p>[source:javascript]<br />
function Cat(name) {<br />
	this.name = name;<br />
}<br />
[/source]</p>
<p>What is <span style="font-weight: bold">this</span>? This, is a reference on the current instance of the object. By calling <span style="font-style: italic">this.name = name</span>, we instantiate an public variable for the object that has the value <span style="font-style: italic">name</span> (the name of the cat).</p>
<h3>3. Adding a instance method</h3>
<p>As I said earlier, I want the cat to meow. So, I will add a <span style="font-style: italic">meow() </span>method to the class that will be available to every instance.</p>
<p>[source:javascript]<br />
function Cat(name) {<br />
	this.name = name;<br />
}</p>
<p>Cat.prototype.meow = function() {<br />
	alert(&#8220;meow!&#8221;);<br />
}<br />
[/source]</p>
<p>I used the class&#8217; <span style="font-style: italic">prototype</span>. This is one of the hundred ways of adding a method but it&#8217;s the best way because we create a <span style="font-weight: bold">single reference for all the objects of that class</span>.</p>
<h3>4. Using variables of an object</h3>
<p>Hey, didn&#8217;t you read the specs? I said that I wanted to see the name of the meowing cat.</p>
<p>[source:javascript]<br />
Cat.prototype.meow = function() {<br />
	alert(this.name + &#8221; : meow!&#8221;);<br />
}<br />
[/source]</p>
<p>Did you see? I used the <span style="font-style: italic">this</span> (reference on the current instance of the object). By doing that, I simply call the variable that I defined in my constructor (see point #2).</p>
<h3>5. Making the cat meow</h3>
<p>Now I&#8217;m ready to make the cat meow. On the <span style="font-style: italic">onload</span> property of the <span style="font-style: italic">body</span> element, I call a function named <span style="font-style: italic">bodyOnload</span>.</p>
<p>&lt;html&gt;<br />
&lt;body onload=&#8217;bodyOnLoad();&#8217; /&gt;<br />
&lt;/html&gt;</p>
<p>In the bodyOnLoad function, I create a Cat object and call the <span style="font-style: italic">meow()</span> method.</p>
<p>[source:javascript]<br />
function bodyOnLoad() {<br />
	var mistigri = new Cat(&#8216;Mistigri&#8217;);<br />
	mistigri.meow();<br />
}<br />
[/source]</p>
<p>I should see an message box with the message <span style="font-weight: bold">&#8220;Mistigri : meow!&#8221;</span> inside.</p>
<h3>In conclusion</h3>
<p>Ok, that was an easy one but though it may seem obvious to you, it is not alway as clear for some of my fellows. The important thing I wanted to show was how to create a class method (see point #3). This is the best/safest/fastest way of doing this.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javascriptkata.com/2007/03/23/how-to-create-objects-in-object-oriented-javascript/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>
