| --adrian-- |
Post
#1
|
|
Goście |
Witam
W taki sposob realizuje dziedziczenie w javascripcie:
Niestety w ten sposob przekazywane sa tylko funkcje i zmienne "publiczne". Moje pytanie jest czy da sie w jakis sposob dziedziczyc z klasy bazowej zmienne i metody "prywatne"(tj. w innych jezykach "protected")? z góry dziekuje za wszystkie odpowiedzi |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%)
|
RANY JULEK ;/ - ALEŻ CI ZACZĘLI MIESZAĆ ;/
metody apply i call służą do wywołania funkcji/metody w kontekście danego obiektu, w kontekście danego obiektu to znaczy, że this w ciele metody/funkcji wskazuje na konkretny obiekt/kontekst... js jest mocno dynamiczny... idąc dalej zaraz na skróty wytłumaczę o co chodzi z tym .prototype - ale wolałbym, byś przeczytał to co w linkach gdyż nie chce mi się za dużo pisać... właśnie kożystając z prototypowania jest mniejszy narzut pamięci gdyż funkcja jest zapisywana raz w prototypie, obrazowo załużmy, że dziadek w prototypie ma zdefiniowaną metodę .cos Kod function Dziadek(zmienne){} Dziadek.prototype.cos = function{}//blabla var jestem_dziadzia = new Dziadek(); jestem_dziadzia.cos(); // wywołane w kontekście obiektu jestem_dziadzia metoda Dziadek.prototype.cos() // rodzice i wnuki - pominmy... wnuk odrazu dziedziczy z dziadzi function Wnuk(){} Wnuk.prototype = new Dziadek(); var wnuk = new Wnuk(); wnuk.cos();// wywołane w kontekście obiektu wnuk metoda Dziadek.prototype.cos() function Prawnuk(){} // dziedziczmy dalej wszystkie metody i zmieńmy to "cos" Prawnuk.prototype = new Wnuk; Prawnuk.prototype.cos = function(){} var prawnuczek = new Prawnuk; prawnuczek.cos(); // wywołane Prawnuczek.prototype.cos() w kontekście obiektu prawnuczek metody są szukane w górę po łańcuchu prototypów dodatkowo odpal se w konsoli i przeanalizuj przykładowy kod który coś Ci powinien dać do myślenia: Kod function Test(a){this.a = a} Test.prototype = {a:3}; var t1 = new Test(9); console.log(t1.a); delete t1.a; console.log(t1.a); t1.a = 11; console.log(t1.a); delete t1.a; console.log(t1.a); na wyjściu otrzymasz: 9 3 11 3 dodatkowo w trakcie możesz zmieniać wartość prototypów to puki coś w żywym obiekcie nie nadpiszesz to to też się zmieni, więc dynamicznie możesz manipulować zachowaniem rzeszy obiektów (wystarczy być kreatywnym, np. +50% obrony dla podobnych odzziałów) - luknij na podobny kod: Kod function Test(){} Test.prototype = {a:3}; var t1 = new Test(), t2 = new Test(); t1.a=1; t2.a=2; console.log(t1.a, t2.a); delete t1.a; delete t2.a; console.log(t1.a, t2.a); Test.prototype.a = 4; console.log(t1.a, t2.a); delete Test.prototype.a; console.log(t1.a, t2.a); na wyjściu otrzymasz: 1 2 3 3 4 4 undefined undefined pisane z palca i nie estetycznie gdyż na szybko... kontekst obiektu dla metod można też przypisując jak w prototype dla metod i czasem tak się też robi, tu apply i call ładniej wyglądają... i jeśli chcesz wywołać konstruktora rodzica w konstruktorze dziecka to kożystasz z apply/call lub metodę w innym kontekście funktion Potomna(zmienna1, zmienna2, zmienna3){ this.bleble = zmienna3; //na reszcie zmiennych zrobić to co rodzic Rodzic.call(this, zmienna2, zmienna1); } dodatkowo w JS często przy toworzeniu instancji prototypu chce się czasem pominąć domyślny konstruktor by nie robił nadmiarowo lub nie ustawial pewnych rzeczy za wczasu - w podanych linkach znajdziesz na to sposób i jesli chcesz go wywołąć w konstruktorze "klasy" (bo nie ma klas, są prototypy obiektów) to kożystasz z call lub apply PRZECZYTAJ PODANE LINKI, POBAW SIĘ Z KODEM I KONSOLĄ I WRAZIE PYTAŃ WRÓĆ I JE ZADAJ ale to co powyżej napisali to mnie rozbawiło ;] sorki za niesformatowany kod i niestety jeśli chodzi o rzeczy związane z informatyką to ANGIELSKI niestety ;] (ja go znam tylko biernie, rozumiem tekst pisany i kto co mówi - sporo filmów ^^) ale sam mówić po ang. nie umiem ;p [chyba, że "kali chcieć jeść ^^"] ps. instanceof działa ;] Ten post edytował zegarek84 10.09.2012, 17:21:14 |
|
|
|
-adrian- [JavaScript] zmienne klasowe "protected" w javascript 9.09.2012, 11:57:17
zegarek84 javascript na innej zasadzie ma obiektowowość - po... 9.09.2012, 13:58:31
stefan33 Dziekuje bardzo za odpowiedz(wczesniej nie bylem n... 10.09.2012, 09:47:06
droslaw Funkcje call/apply to jeden ze sposobów na dziedzi... 10.09.2012, 10:19:05
stefan33 Dziekuje za odpowiedz i potwierdzenie, no tak trze... 10.09.2012, 10:41:20
droslaw Pola prywatne się dzieczyczy ale ze względu na to,... 10.09.2012, 10:51:39
stefan33 Moglbys jasniej napisac co masz na mysli? Mi chodz... 10.09.2012, 11:14:15
droslaw Ja pisałem o dziedziczeniu przez prototype. Jeśli ... 10.09.2012, 11:50:07
stefan33 Dziekuje bardzo za odpowiedzi Wydaje mi sie ze ws... 11.09.2012, 09:10:00 
zegarek84 Cytat(stefan33 @ 11.09.2012, 10:10:00... 12.09.2012, 22:00:32
stefan33 No wiesz mi chodzilo o zmienna prywatna majaca byc... 13.09.2012, 08:31:20
zegarek84 Cytat(stefan33 @ 13.09.2012, 09:31:20... 13.09.2012, 23:40:36 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 05:29 |