Article View: pl.comp.lang.javascript
Article #49144Re: obiektowosc w js - pytanie o dziedziczenie
From: marcoos
Date: Wed, 15 Jul 2009 11:59
Date: Wed, 15 Jul 2009 11:59
56 lines
3262 bytes
3262 bytes
On 15 Lip, 10:43, mmiarecka <mmiare...@gmail.com> wrote:
> To jak po ludzku zaimplementowac prywatne i protected zmienne i
> metody?
Tak naprawdę należy zapomnieć o próbowaniu przenoszenia pojęć Javy do
JS - jest to podejście dość sztuczne i nieco na siłę - i pamiętać
tylko, że zmienne są widoczne tylko w tym zasięgu, w którym zostały
zadeklarowane i w zasięgach potomnych. JS jest językiem totalnie
odmiennym od Javy, jedyne co ma wspólnego, to podobna składnia
odziedziczona po C, ale paradygmaty są zupełnie inne. Poniżej przykład
takiego "na siłę" podejścia...
Jedynym sposobem hermetyzacji w JS są closures, czyli zasięgi funkcji,
za pomocą których można symulować (nie do końca) zachowanie języków w
rodzaju Javy.
var MojeCos = (function () {
var a; // cos w rodzaju "private static"
function MojeCos(a1, b, c) { // a1, b, c - argumenty konstruktora
(jednoczesnie zmienne lokalne zasięgu MojeCos)
var d = 7; // zmienna lokalna zasięgu MojeCos
this.b = b; // publiczne b
a = a1; // zmiana "prywatnego statycznego" a
this.doSth = function() { // publiczna metoda zdefiniowana w
konstruktorze, Crockford nazywa to "priviledged"
alert(a1 + ", " + b + ", " + c + ", " + d); // ma dostęp do a1,
b, c i d dzięki closure
}
}
MojeCos.x = 8; // cos jak "public static"
MojeCos.prototype.doSthElse() { // publiczna metoda prototypu
alert(a); // ma dostep do "private static"
alert(this.b); // ma dostep do publicznych
// alert(c) - nie zadziala, nie ma dostepu, c jest w innym zasiegu
};
return MojeCos;
}());
var mc = new MojeCos();
mc.doSth();
mc.doSthElse();
alert(mc.b);
alert(MojeCos.x);
Kod z głowy, nie testowany - jeśli się gdzieś nie pomyliłem, to
powinien działać. :)
--
marcoos.com
Technical Details
Message-ID:
<5be0104f-8a8c-4001-8154-d8345db1e0e8@h18g2000yqj.googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.glorb.com!postnews.google.com!h18g2000yqj.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> <b2657b6c-9c04-4004-98bd-e44acaf71580@g31g2000yqc.googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.glorb.com!postnews.google.com!h18g2000yqj.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: Wed, 15 Jul 2009 04:59:41 -0700 (PDT) Organization: http://groups.google.com Lines: 61 Message-ID: <5be0104f-8a8c-4001-8154-d8345db1e0e8@h18g2000yqj.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> <b2657b6c-9c04-4004-98bd-e44acaf71580@g31g2000yqc.googlegroups.com> NNTP-Posting-Host: 217.74.64.220 Mime-Version: 1.0 X-Trace: posting.google.com 1247659181 8569 127.0.0.1 (15 Jul 2009 11:59:41 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Wed, 15 Jul 2009 11:59:41 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: h18g2000yqj.googlegroups.com; posting-host=217.74.64.220; posting-account=bLyN-QoAAABLAP6jLtaa2Uu2TLiNvCY8 User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 3.5.30729) Ubiquity/0.1.4,gzip(gfe),gzip(gfe) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit