Article View: pl.comp.lang.javascript
Article #49158Re: obiektowosc w js - pytanie o dziedziczenie
From: marcoos
Date: Thu, 16 Jul 2009 18:14
Date: Thu, 16 Jul 2009 18:14
58 lines
3755 bytes
3755 bytes
On 16 Lip, 09:36, mmiarecka <mmiare...@gmail.com> wrote:
> Bede wdzieczna za info, jesli to nie jest czesc jezyka js, to jakim
> cudem dziala? Dodam ze korzystalam ze wskazowek zawartych na tej
> stronie:http://www.webreference.com/js/column79/3.html
Wcale nie działa. Owszem, coś tam robi, ale nie to, czego tak naprawdę
chcesz. :)
function Kategoria() {
this.inheritFrom = Node;
this.inheritFrom();
}
Co tu zostało zrobione: funkcja-konstruktor o (nieszczęśliwej,
konfliktogennej) nazwie "Node" została przypisana do tworzonego
obiektu pod dziwną i niepasującą nazwą "inheritFrom" i zaraz potem
wywołana. Dzięki temu wprawdzie "this" w tak wywołanej funkcji Node
wskazuje na właściwy obiekt (ten sam this, co wewnątrz konstruktora
Kategoria), ale nie zostanie zachowana hierarchia prototypów.
k = new Kategoria();
alert(k instanceof Node); // false
Ponadto to całe "inheritFrom" wykonuje się (zupełnie niepotrzebnie)
przy każdej instancjacji konstruktora Kategoria. Nie ma to sensu -
szkoda czasu i pamięci.
Dlatego prawidłowo powinno być:
function Kategoria() {
// zakładam, że ma to być funkcja "priviledged"; jeśli nie,
//to powinna być zdefiniowana w prototypie
this.getNazwa = function() {
return "Kategoria.getNazwa";
};
}
Kategoria.prototype = new Node();
W ten sposób prototyp Kategorii jest instancją Node (i tylko raz
zostanie ona zinstancjowana do celów dziedziczenia w Kategorii), a
hierarchia prototypów zostanie zachowana:
k = new Kategoria();
alert(k instanceof Node); // true
Tak działa (pseudo-)klasyczne dziedziczenie w JS. Niektórzy piszą
sobie jakieś funkcje, które to upraszczają (metoda
Function.prototype.method proponowana przez Crockforda, kiedy jeszcze
nie był wrogiem udawania "klasowości" ;)), Prototype.js i inne
biblioteki dostarczają odpowiedni cukier składniowy, ale zasada jest
ta sama.
Inna sprawa, że można sobie całkowicie poradzić (prawie) bez
konstruktorów i operatora new, odchodząc od udawania Javy. Zob.
http://javascript.crockford.com/prototypal.html :)
--
marcoos.com
Technical Details
Message-ID:
<6ef655f7-fac5-4aaf-88f6-364b9c826401@b14g2000yqd.googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!lublin.pl!uw.edu.pl!newsgate.cistron.nl!newsgate.news.xs4all.nl!194.109.133.84.MISMATCH!newsfeed.xs4all.nl!newsfeed5.news.xs4all.nl!xs4all!feeder.news-service.com!feeder.news-service.com!postnews.google.com!b14g2000yqd.googlegroups.com!not-for-mailReferences:
<17b6f087-851f-4bfc-a648-c78d22c89d0f@n30g2000vba.googlegroups.com> <a32abb23-e299-43fd-b64b-0a71fff9852b@33g2000vbe.googlegroups.com> <9b2cb89f-76bf-45ee-80f3-19a7ac1e52d8@k26g2000vbp.googlegroups.com> <0a5f2238-365e-442d-9739-aa75c21bbd77@y19g2000yqy.googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!lublin.pl!uw.edu.pl!newsgate.cistron.nl!newsgate.news.xs4all.nl!194.109.133.84.MISMATCH!newsfeed.xs4all.nl!newsfeed5.news.xs4all.nl!xs4all!feeder.news-service.com!feeder.news-service.com!postnews.google.com!b14g2000yqd.googlegroups.com!not-for-mail From: marcoos <marek.stepien@gmail.com> Newsgroups: pl.comp.lang.javascript Subject: Re: obiektowosc w js - pytanie o dziedziczenie Date: Thu, 16 Jul 2009 11:14:23 -0700 (PDT) Organization: http://groups.google.com Lines: 59 Message-ID: <6ef655f7-fac5-4aaf-88f6-364b9c826401@b14g2000yqd.googlegroups.com> References: <17b6f087-851f-4bfc-a648-c78d22c89d0f@n30g2000vba.googlegroups.com> <a32abb23-e299-43fd-b64b-0a71fff9852b@33g2000vbe.googlegroups.com> <9b2cb89f-76bf-45ee-80f3-19a7ac1e52d8@k26g2000vbp.googlegroups.com> <0a5f2238-365e-442d-9739-aa75c21bbd77@y19g2000yqy.googlegroups.com> NNTP-Posting-Host: 81.186.232.30 Mime-Version: 1.0 X-Trace: posting.google.com 1247768063 2096 127.0.0.1 (16 Jul 2009 18:14:23 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Thu, 16 Jul 2009 18:14:23 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: b14g2000yqd.googlegroups.com; posting-host=81.186.232.30; posting-account=bLyN-QoAAABLAP6jLtaa2Uu2TLiNvCY8 User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; pl; rv:1.9.1) Gecko/20090624 Firefox/3.5,gzip(gfe),gzip(gfe) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit