🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.javascript
Article #49158

Re: obiektowosc w js - pytanie o dziedziczenie

#49158
From: marcoos
Date: Thu, 16 Jul 2009 18:14
58 lines
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-mail
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>

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