Article View: pl.comp.www
Article #408312Re: Javascript - jak tworzyć obiekty w strict mode?
From: nkab
Date: Fri, 02 Oct 2015 07:31
Date: Fri, 02 Oct 2015 07:31
92 lines
4664 bytes
4664 bytes
W dniu czwartek, 1 października 2015 19:27:44 UTC+2 użytkownik Marek napisał:
> W dniu 2015-09-29 o 10:17, nkab@toya.net.pl pisze:
>
> > I co ci się kłóci.
>
> Już pokazuję co w "Twoim" podejściu się kłóci.
> Mamy w klasie bazowej jak i pochodnej tak samo nazwaną zmienną (this.a):
>
> function SuperClass(a,b)
> {
> this.a=a;
> this.b=b;
> }
>
> SuperClass.prototype.parametry=function()
> {
> console.log("parametry", this.a, this.b);
> };
>
> function SubClass(a,b)
> {
> this.a=100;
> SuperClass.call(this,a,b);
> }
>
> SubClass.prototype=Object.create(SuperClass.prototype);
>
> var obj=new SubClass(20,30);
> obj.parametry();
> console.log(obj.a);
>
> Otrzymujemy:
> parametry 20 30
> 20
>
> Spodziewałbym się:
> parametry 20 30
> 100
>
> Wygląda na to, że zmienne używane w klasie bazowej są:
> a) publiczne (czego nie chcę, ale mogę to jeszcze przełknąć)
> b) nadpisywane zmiennymi z klasy potomnej!!!
>
> Pisząc klasę potomną muszę zatem uważać aby nie powtórzyć nazwy zmiennej
> z klasy bazowej. JS pozwala na tworzenie zmiennych gdziekolwiek w kodzie
> więc w życiu nie dojdę jakie nazwy zmiennych są zastrzeżonymi. Mało tego
> - jeśli w późniejszym czasie programista klasy bazowej dorzuci kolejną
> zmienną to może rypnąć się cały projekt bo programiści klas potomnych
> mogą już używać takiej nazwy zmiennej.
>
> Nie wyobrażam sobie jak można nad tym zapanować w takim podejściu.
>
> > Należy trzymać się konwencji języka i stosując tę konwencję kombinować
> > z kopiowaniem (dziedziczeniem).
>
> JS nie ma chyba nigdzie opisanej konwencji języka albo tych konwencji
> jest tyle ilu programistów. Jeśli chcę się nauczyć C++, to kupuję
> dowolny podręcznik i mam konwencję. W JS mogę co najmniej 3 "konwencje"
> OOP przytoczyć i żadna z nich nie działa do końca.
>
>
> --
> Pozdrawiam,
> Marek
Rzeczywiście muszę powtórzyć - niech wypowie się ktoś bardziej
wtajemniczony.
Ta twoja klasa to wcale nie klasa tylko funkcja, która ma udawać
klasę. W JS nie ma klas.
Zaś to "prototype" jest dla nas trochę abstrakcyjne i ja będąc Polakiem
zamienił bym na "addnewvar" czyli dodaj nową zmienną
i następnie var o1=new f1; to nic innego jak po polsku o1=copy f1();
czyli ten obiekt to dużym uproszczeniu kopia f1(), w której możesz
zmieniać do woli wartości zawartych tam zmiennych i są to wartości
zindywidualizowane.
Jeśli robisz szablon function f1(a,b)
to te "a", "b" (przesłane wartości)
są widoczne w każdej kopii (obiekcie).
Jestem programistą indywidualistą i unikam skomplikowanych
figur programistycznych bo nie są mi do niczego potrzebne,
to przecież tylko JS, który wykorzystuję wyłącznie do obsługi stron www,
dlatego cały czas pytam co chcesz uzyskać, bo na razie nie podałeś
konkretnego przykładu tylko błądzisz we mgle.
Andrzej.
Technical Details
Message-ID:
<64c39b9c-63ed-4762-9b8d-98789d4dbb00@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed2.plix.pl!goblin3!goblin.stu.neva.ru!news.ripco.com!usenet.blueworldhosting.com!feeder01.blueworldhosting.com!border2.nntp.dca1.giganews.com!nntp.giganews.com!kq10no14797083igb.0!news-out.google.com!z4ni8614ign.0!nntp.google.com!kq10no15603476igb.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<mtlvuv$3t4$1@news.icm.edu.pl> <1fatjmn7yhrh6$.12pek7r1crfbe$.dlg@40tude.net> <mtmo0d$75a$1@news.icm.edu.pl> <1b7l91pot4apc.4yvv7goat7bo.dlg@40tude.net> <mtojfs$lci$1@news.icm.edu.pl> <8969c543-6cd2-4f56-8531-0d77b5c89929@googlegroups.com> <mubgc4$rhm$1@news.icm.edu.pl> <de165b01-4c1a-4644-ba26-3caf1ebd2a57@googlegroups.com> <mujqee$dk7$1@news.icm.edu.pl>Show Full Headers
Complete Article Headers
X-Received: by 10.50.114.2 with SMTP id jc2mr2552293igb.5.1443771119731; Fri, 02 Oct 2015 00:31:59 -0700 (PDT) X-Received: by 10.50.65.66 with SMTP id v2mr40098igs.5.1443771119705; Fri, 02 Oct 2015 00:31:59 -0700 (PDT) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed2.plix.pl!goblin3!goblin.stu.neva.ru!news.ripco.com!usenet.blueworldhosting.com!feeder01.blueworldhosting.com!border2.nntp.dca1.giganews.com!nntp.giganews.com!kq10no14797083igb.0!news-out.google.com!z4ni8614ign.0!nntp.google.com!kq10no15603476igb.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.www Date: Fri, 2 Oct 2015 00:31:59 -0700 (PDT) In-Reply-To: <mujqee$dk7$1@news.icm.edu.pl> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=31.182.85.241; posting-account=xnOwqAoAAAAJ48pUkVrL2a6sJByqdB8s NNTP-Posting-Host: 31.182.85.241 References: <mtlvuv$3t4$1@news.icm.edu.pl> <1fatjmn7yhrh6$.12pek7r1crfbe$.dlg@40tude.net> <mtmo0d$75a$1@news.icm.edu.pl> <1b7l91pot4apc.4yvv7goat7bo.dlg@40tude.net> <mtojfs$lci$1@news.icm.edu.pl> <8969c543-6cd2-4f56-8531-0d77b5c89929@googlegroups.com> <mubgc4$rhm$1@news.icm.edu.pl> <de165b01-4c1a-4644-ba26-3caf1ebd2a57@googlegroups.com> <mujqee$dk7$1@news.icm.edu.pl> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <64c39b9c-63ed-4762-9b8d-98789d4dbb00@googlegroups.com> Subject: Re: Javascript - jak tworzyć obiekty w strict mode? From: nkab@toya.net.pl Injection-Date: Fri, 02 Oct 2015 07:31:59 +0000 Lines: 105 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit