<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Komentáře k: JavaScript očima programátora</title>
	<atom:link href="http://www.augi.cz/programovani/javascript-ocima-programatora/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.augi.cz/programovani/javascript-ocima-programatora/</link>
	<description>Osobní stránky jednoho podivného programátora...</description>
	<lastBuildDate>Fri, 09 Jul 2010 16:36:41 +0200</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Od: Daniel Steigerwald</title>
		<link>http://www.augi.cz/programovani/javascript-ocima-programatora/comment-page-1/#comment-6863</link>
		<dc:creator>Daniel Steigerwald</dc:creator>
		<pubDate>Mon, 15 Mar 2010 21:01:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=404#comment-6863</guid>
		<description>Tak Michale, rychle sem ten článek znovu prolétl. Snad se nebudeš zlobit, když tu udělám resumé pro náhodného návštěvníka.
Na začátku musím říct, že si nezmínil, že některé techniky pod IE6/7/8 fungovat nebudou. Chápu proč, zmiňuješ SpiderMonkey, já jen že to někoho může zmást, když to přehlédne.

Eval je nebezpečná technika, to jen tak naokraj bych zmínil. Eval is Evil, tak nějak patří k sobě :)

Object initializers je pojem z C#3, v Javascriptu se říká object literal. 

JSON není object literal. Je to jeho subset. Nesmí obsahovat funkce, a klade vyšší nároky na syntax (pouze dvojité uvozovky, a to i u klíčů)

Nikdy nedefinuj metody v konstruktoru (viz druhý díl seriálu)

&quot;Privilegované položky v prototype totiž nejsou enumerabilní, tj. pokud budeme projíždět všechny položky objektu cyklem for-in, nedostaneme se k privilegované metodě.&quot;
Není pravda, enumerabilní jsou všechny, avšak Internet Explorer má bug:  http://jsfiddle.net/MPZwE/ 

Opravdovou vícenásobnou dědičnost JS nemá (viz třetí díl seriálu)

T2.prototype = new T1; je principiálně jediný správný postup, avšak máš pravdu v tom, že je špatný (nechceme volat konstruktor kvůli dědičnosti) Nicméně, lze to snadno obejít (viz druhý díl seriálu)

&quot;Následující řešení se mi zdá zajímavější:&quot; - ani tohle není ten správný způsob...

&quot;T2.prototype = T1.prototype;&quot; Tohle je moc ;) Nelze předávat konstruktor tímto způsobem.. to bys pak měl dědičnost v obou směrech ;) Cokoliv bys přidal do prototype T2, by měla i třída T1 :)

Všechno v Javascriptu není objekt. Javascript má totiž i primitivní typy. Ty sice můžeš boxovat, ale fakticky vytváříš nové objekty.

Prototype není kontejner pro statické položky třídy. To je třída sama. (viz také můj článek, díl třetí)

No a rozšiřovat Object prototype je také zlo... (zase článek ;)

Prostě.. tady dlouho chyběla (a chybí) literatura. Proto je logické, že člověk dělá chyby. Já sem měl to štěstí (nebo tu smůlu;), že sem si všechny slepé cesty poctivě prošlapal :)

http://zdrojak.root.cz/clanky/oop-v-javascriptu-i/</description>
		<content:encoded><![CDATA[<p>Tak Michale, rychle sem ten článek znovu prolétl. Snad se nebudeš zlobit, když tu udělám resumé pro náhodného návštěvníka.<br />
Na začátku musím říct, že si nezmínil, že některé techniky pod IE6/7/8 fungovat nebudou. Chápu proč, zmiňuješ SpiderMonkey, já jen že to někoho může zmást, když to přehlédne.</p>
<p>Eval je nebezpečná technika, to jen tak naokraj bych zmínil. Eval is Evil, tak nějak patří k sobě <img src='http://www.augi.cz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Object initializers je pojem z C#3, v Javascriptu se říká object literal. </p>
<p>JSON není object literal. Je to jeho subset. Nesmí obsahovat funkce, a klade vyšší nároky na syntax (pouze dvojité uvozovky, a to i u klíčů)</p>
<p>Nikdy nedefinuj metody v konstruktoru (viz druhý díl seriálu)</p>
<p>&#8220;Privilegované položky v prototype totiž nejsou enumerabilní, tj. pokud budeme projíždět všechny položky objektu cyklem for-in, nedostaneme se k privilegované metodě.&#8221;<br />
Není pravda, enumerabilní jsou všechny, avšak Internet Explorer má bug:  <a href="http://jsfiddle.net/MPZwE/" rel="nofollow">http://jsfiddle.net/MPZwE/</a> </p>
<p>Opravdovou vícenásobnou dědičnost JS nemá (viz třetí díl seriálu)</p>
<p>T2.prototype = new T1; je principiálně jediný správný postup, avšak máš pravdu v tom, že je špatný (nechceme volat konstruktor kvůli dědičnosti) Nicméně, lze to snadno obejít (viz druhý díl seriálu)</p>
<p>&#8220;Následující řešení se mi zdá zajímavější:&#8221; &#8211; ani tohle není ten správný způsob&#8230;</p>
<p>&#8220;T2.prototype = T1.prototype;&#8221; Tohle je moc <img src='http://www.augi.cz/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Nelze předávat konstruktor tímto způsobem.. to bys pak měl dědičnost v obou směrech <img src='http://www.augi.cz/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Cokoliv bys přidal do prototype T2, by měla i třída T1 <img src='http://www.augi.cz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Všechno v Javascriptu není objekt. Javascript má totiž i primitivní typy. Ty sice můžeš boxovat, ale fakticky vytváříš nové objekty.</p>
<p>Prototype není kontejner pro statické položky třídy. To je třída sama. (viz také můj článek, díl třetí)</p>
<p>No a rozšiřovat Object prototype je také zlo&#8230; (zase článek <img src='http://www.augi.cz/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Prostě.. tady dlouho chyběla (a chybí) literatura. Proto je logické, že člověk dělá chyby. Já sem měl to štěstí (nebo tu smůlu;), že sem si všechny slepé cesty poctivě prošlapal <img src='http://www.augi.cz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://zdrojak.root.cz/clanky/oop-v-javascriptu-i/" rel="nofollow">http://zdrojak.root.cz/clanky/oop-v-javascriptu-i/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Augi</title>
		<link>http://www.augi.cz/programovani/javascript-ocima-programatora/comment-page-1/#comment-6699</link>
		<dc:creator>Augi</dc:creator>
		<pubDate>Wed, 03 Mar 2010 07:12:27 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=404#comment-6699</guid>
		<description>Mně to je jasné...ale je to trošku něco jiného než dědičnost. Extensions metody jsou jen syntaktickej cukr :)</description>
		<content:encoded><![CDATA[<p>Mně to je jasné&#8230;ale je to trošku něco jiného než dědičnost. Extensions metody jsou jen syntaktickej cukr <img src='http://www.augi.cz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Daniel Steigerwald</title>
		<link>http://www.augi.cz/programovani/javascript-ocima-programatora/comment-page-1/#comment-6694</link>
		<dc:creator>Daniel Steigerwald</dc:creator>
		<pubDate>Tue, 02 Mar 2010 22:07:27 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=404#comment-6694</guid>
		<description>Zapomněl sem dodat, že jde o něco jako extensions metody v C# 3</description>
		<content:encoded><![CDATA[<p>Zapomněl sem dodat, že jde o něco jako extensions metody v C# 3</p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Daniel Steigerwald</title>
		<link>http://www.augi.cz/programovani/javascript-ocima-programatora/comment-page-1/#comment-6693</link>
		<dc:creator>Daniel Steigerwald</dc:creator>
		<pubDate>Tue, 02 Mar 2010 22:06:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=404#comment-6693</guid>
		<description>To nevím proč by měl. Krása Javascriptu je právě v tom, že můžeš měnit již existující implementaci. Příklad:
Sosnu si framework Mootools. Ten obsahuje třídu Element. 
Chci přidat nějakou funkcionalitu, ale nechci sahat do kódu frameworku.
Proto ve svém kódu napíšu:
Element.prototype.explode = function() {...}
Pak stačí $(&#039;myBoss&#039;).explode(); 
Je to jasné?</description>
		<content:encoded><![CDATA[<p>To nevím proč by měl. Krása Javascriptu je právě v tom, že můžeš měnit již existující implementaci. Příklad:<br />
Sosnu si framework Mootools. Ten obsahuje třídu Element.<br />
Chci přidat nějakou funkcionalitu, ale nechci sahat do kódu frameworku.<br />
Proto ve svém kódu napíšu:<br />
Element.prototype.explode = function() {&#8230;}<br />
Pak stačí $(&#8217;myBoss&#8217;).explode();<br />
Je to jasné?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Augi</title>
		<link>http://www.augi.cz/programovani/javascript-ocima-programatora/comment-page-1/#comment-6692</link>
		<dc:creator>Augi</dc:creator>
		<pubDate>Tue, 02 Mar 2010 21:41:08 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=404#comment-6692</guid>
		<description>Jistě, že je to altering prototypes. Je to myšleno tak (nebo aspoň já jsem si to tak vyložil a víceméně se s tím ztotožňuji), že skript by měl mít &quot;deklarační&quot; a &quot;výkonnou&quot; část, které by se neměly míchat (něco jako interface a implementation v Delphi).</description>
		<content:encoded><![CDATA[<p>Jistě, že je to altering prototypes. Je to myšleno tak (nebo aspoň já jsem si to tak vyložil a víceméně se s tím ztotožňuji), že skript by měl mít &#8220;deklarační&#8221; a &#8220;výkonnou&#8221; část, které by se neměly míchat (něco jako interface a implementation v Delphi).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Daniel Steigerwald</title>
		<link>http://www.augi.cz/programovani/javascript-ocima-programatora/comment-page-1/#comment-6691</link>
		<dc:creator>Daniel Steigerwald</dc:creator>
		<pubDate>Tue, 02 Mar 2010 21:21:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=404#comment-6691</guid>
		<description>Kouknul sem na ten článek, z něj bych si radu fakt nebral. Věta “Altering prototypes during your script is a tricky and dangerous procedure.” je úplně mimo. 
String.prototype.nasrat = function() {}...
Co to je jiného, než altering prototypes..?</description>
		<content:encoded><![CDATA[<p>Kouknul sem na ten článek, z něj bych si radu fakt nebral. Věta “Altering prototypes during your script is a tricky and dangerous procedure.” je úplně mimo.<br />
String.prototype.nasrat = function() {}&#8230;<br />
Co to je jiného, než altering prototypes..?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Augi</title>
		<link>http://www.augi.cz/programovani/javascript-ocima-programatora/comment-page-1/#comment-6688</link>
		<dc:creator>Augi</dc:creator>
		<pubDate>Tue, 02 Mar 2010 17:24:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=404#comment-6688</guid>
		<description>Jojo, já si tenhle efekt uvědomuju :)</description>
		<content:encoded><![CDATA[<p>Jojo, já si tenhle efekt uvědomuju <img src='http://www.augi.cz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Daniel Steigerwald</title>
		<link>http://www.augi.cz/programovani/javascript-ocima-programatora/comment-page-1/#comment-6687</link>
		<dc:creator>Daniel Steigerwald</dc:creator>
		<pubDate>Tue, 02 Mar 2010 15:36:35 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=404#comment-6687</guid>
		<description>Ještě k rozšiřování Object.prototype. Pokud budeš v Javascriptu opravdu iterovat pouze pole, nic se nestane. Pochybuji ovšem, že to zaručíš u všech skriptů, protože iterování objektů {}, je velmi časté prostě proto, že se pomocí {} implementují key-value based slovníky. A to naprosto všude a ve všech libraries.
Typicky:
$(&#039;#box&#039;).setStyles({width: &#039;20px&#039;, color: &#039;red&#039;});
Pokud rozšíříš Base objekt javascriptu (Object), ze kterého se vše dědí, nastavíš #boxu styl &#039;extend&#039; s hodnotou: function(arg) {... }.. což asi nechceš ;)</description>
		<content:encoded><![CDATA[<p>Ještě k rozšiřování Object.prototype. Pokud budeš v Javascriptu opravdu iterovat pouze pole, nic se nestane. Pochybuji ovšem, že to zaručíš u všech skriptů, protože iterování objektů {}, je velmi časté prostě proto, že se pomocí {} implementují key-value based slovníky. A to naprosto všude a ve všech libraries.<br />
Typicky:<br />
$(&#8217;#box&#8217;).setStyles({width: &#8216;20px&#8217;, color: &#8216;red&#8217;});<br />
Pokud rozšíříš Base objekt javascriptu (Object), ze kterého se vše dědí, nastavíš #boxu styl &#8216;extend&#8217; s hodnotou: function(arg) {&#8230; }.. což asi nechceš <img src='http://www.augi.cz/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Augi</title>
		<link>http://www.augi.cz/programovani/javascript-ocima-programatora/comment-page-1/#comment-6681</link>
		<dc:creator>Augi</dc:creator>
		<pubDate>Tue, 02 Mar 2010 13:42:41 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=404#comment-6681</guid>
		<description>koubel: Díky za doplnění. Mně osobně ale to, že je pak constructor enum nikdy nevadilo, protože iteruju jen přes pole pomocí normálního foru.

Daniel: Asi záleží na konkrétní aplikaci - já třeba iteruju jen pomocí normálního foru přes pole. For-in považuju za něco jako reflexi v C#, takže se tomu snažím vyhnout. Tvůj kód opravdu selže - já jsem totiž předpokládal, že se nejdřív vytvoří prototypy a pak se použijí (tj. žádné míchání). Jak se píše v tom &lt;a href=&quot;http://dmitry.baranovskiy.com/post/javascript-inheritance-pattern&quot; rel=&quot;nofollow&quot;&gt;odkazovaném článku&lt;/a&gt;: &quot;Altering prototypes during your script is a tricky and dangerous procedure.&quot;
S tím Function.prototype máš samozřejmě pravdu.
Na Tvůj článek se těším ;-)</description>
		<content:encoded><![CDATA[<p>koubel: Díky za doplnění. Mně osobně ale to, že je pak constructor enum nikdy nevadilo, protože iteruju jen přes pole pomocí normálního foru.</p>
<p>Daniel: Asi záleží na konkrétní aplikaci &#8211; já třeba iteruju jen pomocí normálního foru přes pole. For-in považuju za něco jako reflexi v C#, takže se tomu snažím vyhnout. Tvůj kód opravdu selže &#8211; já jsem totiž předpokládal, že se nejdřív vytvoří prototypy a pak se použijí (tj. žádné míchání). Jak se píše v tom <a href="http://dmitry.baranovskiy.com/post/javascript-inheritance-pattern" rel="nofollow">odkazovaném článku</a>: &#8220;Altering prototypes during your script is a tricky and dangerous procedure.&#8221;<br />
S tím Function.prototype máš samozřejmě pravdu.<br />
Na Tvůj článek se těším <img src='http://www.augi.cz/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Daniel Steigerwald</title>
		<link>http://www.augi.cz/programovani/javascript-ocima-programatora/comment-page-1/#comment-6680</link>
		<dc:creator>Daniel Steigerwald</dc:creator>
		<pubDate>Tue, 02 Mar 2010 13:42:27 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=404#comment-6680</guid>
		<description>Mimochodem, pro tvoje použití by stačilo rozšířit prototype Funkce. 
Function.prototype.extend = fn..</description>
		<content:encoded><![CDATA[<p>Mimochodem, pro tvoje použití by stačilo rozšířit prototype Funkce.<br />
Function.prototype.extend = fn..</p>
]]></content:encoded>
	</item>
</channel>
</rss>
