<?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>Komentarze do: &#8222;this&#8221; w JavaScript</title>
	<atom:link href="http://ferrante.pl/2010/02/02/this-w-javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://ferrante.pl/frontend/javascript/this-w-javascript/</link>
	<description>Technologie internetowe, PHP5, Python, Javascript. Publicystyka i kursy w najlepszym wydaniu.</description>
	<lastBuildDate>Thu, 17 May 2012 16:46:58 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>Autor: zegarek84</title>
		<link>http://ferrante.pl/frontend/javascript/this-w-javascript/comment-page-1/#comment-9442</link>
		<dc:creator>zegarek84</dc:creator>
		<pubDate>Wed, 10 Feb 2010 12:34:12 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=672#comment-9442</guid>
		<description>klawiatura mi się przycięła ;p

proszę o zamianę w mojej odpowiedzi fragmentu:
&gt;&gt; poza tym tworząc obiekty najszybszą metodą jest zdefiniowanie niezbędnego minimum w prototypie do zmiennych prywatnych lub niezbędnego minimum obiektu statycznego a potem dołączenie reszty przez prototype…
___________
na:
poza tym tworząc obiekty najszybszą metodą jest zdefiniowanie niezbędnego minimum w obiekcie do potrzebnych zmiennych prywatnych lub niezbędnego minimum obiektu statycznego a potem dołączenie reszty przez prototype…</description>
		<content:encoded><![CDATA[<p>klawiatura mi się przycięła ;p</p>
<p>proszę o zamianę w mojej odpowiedzi fragmentu:<br />
&gt;&gt; poza tym tworząc obiekty najszybszą metodą jest zdefiniowanie niezbędnego minimum w prototypie do zmiennych prywatnych lub niezbędnego minimum obiektu statycznego a potem dołączenie reszty przez prototype…<br />
___________<br />
na:<br />
poza tym tworząc obiekty najszybszą metodą jest zdefiniowanie niezbędnego minimum w obiekcie do potrzebnych zmiennych prywatnych lub niezbędnego minimum obiektu statycznego a potem dołączenie reszty przez prototype…</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: zegarek84</title>
		<link>http://ferrante.pl/frontend/javascript/this-w-javascript/comment-page-1/#comment-9441</link>
		<dc:creator>zegarek84</dc:creator>
		<pubDate>Wed, 10 Feb 2010 12:30:48 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=672#comment-9441</guid>
		<description>&gt;&gt; Całkiem przez przypadek zastanawiałem się dzisiaj (jeszcze nim opublikowałeś ten artykuł ;) czy da się mając object literal w postaci:
&gt;&gt; var obj = { foo: 2, bar: ‘dwarazyfoo’ }
&gt;&gt; zadeklarować go tak żeby bar było np. dwa razy foo. Tzn jak się dobrać do jakiejś właściwości podczas deklarowania obiektu w ten sposób? Nie mówię tu o tym, że później mogę sobie zrobić obj.bar = 2*obj.foo.

heh - fajnie, że i takie pytanie padło gdyż ja się właśnie uczę gdy ktoś pyta ;)... nie wiem czy to zadziała na IE ale w operze i mozilli działa - wystarczy wkleić w pasku adresu coby sprawdzić:

javascript:foo={get test(){ return 2*this.c; }, set test(val){this.c=val;},c:33};alert(foo.test);foo.test=44;alert(foo.test);void(0)

ogólnie to pytanie odniosłem do obiektu JSON - gdyż wystarczyło tylko zdefiniować getter i setter - ale jakoś metody to ja wolę by były zakończone &quot;normalnie&quot; czyli nawiasem - a co do definiowania getterów to nie jest to jedyny sposób....

poza tym tworząc obiekty najszybszą metodą jest zdefiniowanie niezbędnego minimum w prototypie do zmiennych prywatnych lub niezbędnego minimum obiektu statycznego a potem dołączenie reszty przez prototype...

jeszcze ciekawą kwestią jest użycie this z funkcjami typu setTimeout (wiadomo - nie można bezpośrednio używać this w niektórych przypadkach - ale w wielu można ;) ) - ale raz na forum.php zostałem zaskoczony gdy jakoś umyśliło mi się pisać jak może być deczko optymalniej - jakoś po przypisaniu this do zmiennej prywatnej w metodzie z setTimeout gdzie this występowało 3 razy jakoś to dziwnie się zaczęło zachowywać - nagle this &quot;zgłupiał&quot; mimo poprawnego zapisu, mimo iż działał a ja tylko poprawiłem setTimeoute (i użycie this w tej funkcji też zależy od kilku sytuacji) - jak się okazało podczas tej drobnej obtymalizacji połączonej z hermetyzacją kodu w danej metodzie trzeba było zamienić wszystkie this na zmienną prywatną będącą właśnie tym this - w problem bardzo się nie wgłębiałem i stwierdziłem, że błąd następuje przy kompilacji skryptu do samej pamięci przez interpreter - dokładniej to taka sytuacji pojawiła się w tym temacie:

http://forum.php.pl/index.php?showtopic=98464&amp;hl=</description>
		<content:encoded><![CDATA[<p>&gt;&gt; Całkiem przez przypadek zastanawiałem się dzisiaj (jeszcze nim opublikowałeś ten artykuł ;) czy da się mając object literal w postaci:<br />
&gt;&gt; var obj = { foo: 2, bar: ‘dwarazyfoo’ }<br />
&gt;&gt; zadeklarować go tak żeby bar było np. dwa razy foo. Tzn jak się dobrać do jakiejś właściwości podczas deklarowania obiektu w ten sposób? Nie mówię tu o tym, że później mogę sobie zrobić obj.bar = 2*obj.foo.</p>
<p>heh &#8211; fajnie, że i takie pytanie padło gdyż ja się właśnie uczę gdy ktoś pyta ;)&#8230; nie wiem czy to zadziała na IE ale w operze i mozilli działa &#8211; wystarczy wkleić w pasku adresu coby sprawdzić:</p>
<p>javascript:foo={get test(){ return 2*this.c; }, set test(val){this.c=val;},c:33};alert(foo.test);foo.test=44;alert(foo.test);void(0)</p>
<p>ogólnie to pytanie odniosłem do obiektu JSON &#8211; gdyż wystarczyło tylko zdefiniować getter i setter &#8211; ale jakoś metody to ja wolę by były zakończone &#8222;normalnie&#8221; czyli nawiasem &#8211; a co do definiowania getterów to nie jest to jedyny sposób&#8230;.</p>
<p>poza tym tworząc obiekty najszybszą metodą jest zdefiniowanie niezbędnego minimum w prototypie do zmiennych prywatnych lub niezbędnego minimum obiektu statycznego a potem dołączenie reszty przez prototype&#8230;</p>
<p>jeszcze ciekawą kwestią jest użycie this z funkcjami typu setTimeout (wiadomo &#8211; nie można bezpośrednio używać this w niektórych przypadkach &#8211; ale w wielu można ;) ) &#8211; ale raz na forum.php zostałem zaskoczony gdy jakoś umyśliło mi się pisać jak może być deczko optymalniej &#8211; jakoś po przypisaniu this do zmiennej prywatnej w metodzie z setTimeout gdzie this występowało 3 razy jakoś to dziwnie się zaczęło zachowywać &#8211; nagle this &#8222;zgłupiał&#8221; mimo poprawnego zapisu, mimo iż działał a ja tylko poprawiłem setTimeoute (i użycie this w tej funkcji też zależy od kilku sytuacji) &#8211; jak się okazało podczas tej drobnej obtymalizacji połączonej z hermetyzacją kodu w danej metodzie trzeba było zamienić wszystkie this na zmienną prywatną będącą właśnie tym this &#8211; w problem bardzo się nie wgłębiałem i stwierdziłem, że błąd następuje przy kompilacji skryptu do samej pamięci przez interpreter &#8211; dokładniej to taka sytuacji pojawiła się w tym temacie:</p>
<p><a href="http://forum.php.pl/index.php?showtopic=98464&#038;hl" rel="nofollow">http://forum.php.pl/index.php?showtopic=98464&#038;hl</a>=</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: OlgaGr</title>
		<link>http://ferrante.pl/frontend/javascript/this-w-javascript/comment-page-1/#comment-9413</link>
		<dc:creator>OlgaGr</dc:creator>
		<pubDate>Sat, 06 Feb 2010 17:20:01 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=672#comment-9413</guid>
		<description>this === window -&gt; false pod Firebug rzeczywiście daje false. David de Rosier (też prowadzi szkolenia dla rekrutacyjny.pl) wytłumaczył mi to tak, że Firebug &quot;przykrywa&quot; globalne this. Rozwiązanie: zamiast this napisać self:

self === window //true</description>
		<content:encoded><![CDATA[<p>this === window -&gt; false pod Firebug rzeczywiście daje false. David de Rosier (też prowadzi szkolenia dla rekrutacyjny.pl) wytłumaczył mi to tak, że Firebug &#8222;przykrywa&#8221; globalne this. Rozwiązanie: zamiast this napisać self:</p>
<p>self === window //true</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: ferrante</title>
		<link>http://ferrante.pl/frontend/javascript/this-w-javascript/comment-page-1/#comment-9410</link>
		<dc:creator>ferrante</dc:creator>
		<pubDate>Fri, 05 Feb 2010 18:48:53 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=672#comment-9410</guid>
		<description>Racja, aczkolwiek mysle, ze to bylo celowe uproszczenie Krzysztofa.

Pozdr</description>
		<content:encoded><![CDATA[<p>Racja, aczkolwiek mysle, ze to bylo celowe uproszczenie Krzysztofa.</p>
<p>Pozdr</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Kamil Trebunia</title>
		<link>http://ferrante.pl/frontend/javascript/this-w-javascript/comment-page-1/#comment-9409</link>
		<dc:creator>Kamil Trebunia</dc:creator>
		<pubDate>Fri, 05 Feb 2010 18:05:58 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=672#comment-9409</guid>
		<description>Hmm... W argumentacji Krzyśka, choć generalnie poprawnej jest chyba drobna luka, czyż nie? Chodzi mi o ten fragment: &quot;Zmienna res utworzona jak w przykładzie jest właściwością obiektu window&quot; - przecież to nie ma żadnego znaczenia właściwością czego jest &#039;res&#039; - istotne jest tylko w jakim kontekście wykonamy funkcję &#039;fn&#039; (a o tym Krzysiek nie wspomina). Gdyby zamiast &quot;Zmienna res&quot; wstawić w tamtym zdaniu &quot;Funkcja fn&quot; (i pewnie taka była nawet intencja autora), to moim zdaniem było by już w 100% poprawnie.</description>
		<content:encoded><![CDATA[<p>Hmm&#8230; W argumentacji Krzyśka, choć generalnie poprawnej jest chyba drobna luka, czyż nie? Chodzi mi o ten fragment: &#8222;Zmienna res utworzona jak w przykładzie jest właściwością obiektu window&#8221; &#8211; przecież to nie ma żadnego znaczenia właściwością czego jest &#8216;res&#8217; &#8211; istotne jest tylko w jakim kontekście wykonamy funkcję &#8216;fn&#8217; (a o tym Krzysiek nie wspomina). Gdyby zamiast &#8222;Zmienna res&#8221; wstawić w tamtym zdaniu &#8222;Funkcja fn&#8221; (i pewnie taka była nawet intencja autora), to moim zdaniem było by już w 100% poprawnie.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: ferrante</title>
		<link>http://ferrante.pl/frontend/javascript/this-w-javascript/comment-page-1/#comment-9405</link>
		<dc:creator>ferrante</dc:creator>
		<pubDate>Wed, 03 Feb 2010 19:17:48 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=672#comment-9405</guid>
		<description>Piotrek: Dobrze kombinujesz. Co do ostatniego pytania to niestety nie przypominam sobie żadnego rozwiązania z this...

Krzysiek: Dostajesz talon na częstsze pisanie postów na blogu. Gratulacje!

Pozdrawiam</description>
		<content:encoded><![CDATA[<p>Piotrek: Dobrze kombinujesz. Co do ostatniego pytania to niestety nie przypominam sobie żadnego rozwiązania z this&#8230;</p>
<p>Krzysiek: Dostajesz talon na częstsze pisanie postów na blogu. Gratulacje!</p>
<p>Pozdrawiam</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: “this” w JavaScript - develway.pl</title>
		<link>http://ferrante.pl/frontend/javascript/this-w-javascript/comment-page-1/#comment-9400</link>
		<dc:creator>“this” w JavaScript - develway.pl</dc:creator>
		<pubDate>Wed, 03 Feb 2010 07:09:56 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=672#comment-9400</guid>
		<description>[...]  źródło: ferrante.pl       Follow us on Twitter 25 śledzących RSS Feed 238 czytelników     “this” w JavaScript     1   głosuj!    O &quot;this&quot; w JavaScript słów kilka. &#160;&#160; więcej &#187;      [...]</description>
		<content:encoded><![CDATA[<p>[...]  źródło: ferrante.pl       Follow us on Twitter 25 śledzących RSS Feed 238 czytelników     “this” w JavaScript     1   głosuj!    O &quot;this&quot; w JavaScript słów kilka. &nbsp;&nbsp; więcej &raquo;      [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Szafranek</title>
		<link>http://ferrante.pl/frontend/javascript/this-w-javascript/comment-page-1/#comment-9399</link>
		<dc:creator>Szafranek</dc:creator>
		<pubDate>Wed, 03 Feb 2010 00:32:44 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=672#comment-9399</guid>
		<description>Bardzo ładny tekst :).

W zagadce dostaniemy true. Zmienna res utworzona jak w przykładzie jest właściwością obiektu window:
res === window[&#039;res&#039;]

Zatem odwołanie this.e wykona się w kontekście obiektu globalnego window. W tym kontekście:
this.e === window[&#039;e&#039;]

Zmienna e (lub dokładniej: właściwość e obiektu window) ma wartość true, bo:
!3 === false
!!3 === true
Za sprawą operatora ! trójka zostaje zrzutowana do typu boolowskiego. Ponieważ jest różna od zera, po zrzutowaniu daje true. A true po podwójnym zaprzeczeniu to nadal true.


Jako bonus możemy się pobawić i wywołać funkcję fn w kontekście zwracanego przez nią samą obiektu :). Wtedy foobar zachowa się inaczej, bo this będzie wskazywało na zwracany obiekt (pierwszy parametr apply), a nie obiekt globalny window:

fn.apply(fn())[&#039;foobar&#039;] === false;


Co wygrałem? :)</description>
		<content:encoded><![CDATA[<p>Bardzo ładny tekst :).</p>
<p>W zagadce dostaniemy true. Zmienna res utworzona jak w przykładzie jest właściwością obiektu window:<br />
res === window['res']</p>
<p>Zatem odwołanie this.e wykona się w kontekście obiektu globalnego window. W tym kontekście:<br />
this.e === window['e']</p>
<p>Zmienna e (lub dokładniej: właściwość e obiektu window) ma wartość true, bo:<br />
!3 === false<br />
!!3 === true<br />
Za sprawą operatora ! trójka zostaje zrzutowana do typu boolowskiego. Ponieważ jest różna od zera, po zrzutowaniu daje true. A true po podwójnym zaprzeczeniu to nadal true.</p>
<p>Jako bonus możemy się pobawić i wywołać funkcję fn w kontekście zwracanego przez nią samą obiektu :). Wtedy foobar zachowa się inaczej, bo this będzie wskazywało na zwracany obiekt (pierwszy parametr apply), a nie obiekt globalny window:</p>
<p>fn.apply(fn())['foobar'] === false;</p>
<p>Co wygrałem? :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Piotrek Reinmar Koszuliński</title>
		<link>http://ferrante.pl/frontend/javascript/this-w-javascript/comment-page-1/#comment-9398</link>
		<dc:creator>Piotrek Reinmar Koszuliński</dc:creator>
		<pubDate>Wed, 03 Feb 2010 00:03:46 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=672#comment-9398</guid>
		<description>Widzę, że spisujesz treść szkolenia dla potomnych :)

Taka uwaga jakby się ktoś głowił - odpalanie niektórych z tych przykładów w Firebugu nic nie da, bo chyba nie do końca są one odpalane w globalnym scopie (this === window -&gt; false).

Czy przedostatni przykład (ten z obj.foo();//window) mam rozumieć tak, że dlatego dostajemy obiekt globalny, bo funkcja b jest zadeklarowana w kontekście funkcji fn (a nie konstruktora), więc według wspomnianej zasady jako funkcja zadeklarowana w funkcji wskazuje na obiekt globalny?

Całkiem przez przypadek zastanawiałem się dzisiaj (jeszcze nim opublikowałeś ten artykuł ;) czy da się mając object literal w postaci:
var obj = { foo: 2, bar: &#039;dwarazyfoo&#039; }
zadeklarować go tak żeby bar było np. dwa razy foo. Tzn jak się dobrać do jakiejś właściwości podczas deklarowania obiektu w ten sposób? Nie mówię tu o tym, że później mogę sobie zrobić obj.bar = 2*obj.foo.</description>
		<content:encoded><![CDATA[<p>Widzę, że spisujesz treść szkolenia dla potomnych :)</p>
<p>Taka uwaga jakby się ktoś głowił &#8211; odpalanie niektórych z tych przykładów w Firebugu nic nie da, bo chyba nie do końca są one odpalane w globalnym scopie (this === window -&gt; false).</p>
<p>Czy przedostatni przykład (ten z obj.foo();//window) mam rozumieć tak, że dlatego dostajemy obiekt globalny, bo funkcja b jest zadeklarowana w kontekście funkcji fn (a nie konstruktora), więc według wspomnianej zasady jako funkcja zadeklarowana w funkcji wskazuje na obiekt globalny?</p>
<p>Całkiem przez przypadek zastanawiałem się dzisiaj (jeszcze nim opublikowałeś ten artykuł ;) czy da się mając object literal w postaci:<br />
var obj = { foo: 2, bar: &#8216;dwarazyfoo&#8217; }<br />
zadeklarować go tak żeby bar było np. dwa razy foo. Tzn jak się dobrać do jakiejś właściwości podczas deklarowania obiektu w ten sposób? Nie mówię tu o tym, że później mogę sobie zrobić obj.bar = 2*obj.foo.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

