jesteś tutaj
593
Stosowanie prototypów
species: "Psowate"
Prototyp Dog
bark()
run()
wag()
name: ".ieâ",
breed: "chihuahua",
weight: 4
Dog
Przesłanianie prototypu
Sam fakt, że odziedziczyliśmy coś po prototypie, nie oznacza,
że jesteśmy na to skazani. Bez trudu możemy
przesłaniać
właściwości i metody poprzez określenie ich wartości w instancji
obiektu. Takie rozwiązanie spełni swoje zadanie, gdyż poszukując
właściwości, JavaScript zawsze najpierw sprawdza instancję
obiektu — czyli konkretny obiekt psa — a
dopiero potem szuka
jej w prototypie. Gdybyś zatem chciał zastosować inną metodę
bark
w obiekcie
spot
, wystarczy, że ją w nim umieścisz. Kiedy to
zrobisz, JavaScript nie będzie zawracał sobie głowy zaglądaniem
do prototypu, kiedy przed wywołaniem metody
bark
zacznie jej
poszukiwać.
Zobaczmy, jak wygląda sytuacja, kiedy przesłonimy metodę
bark
Kła, by zapewnić mu możliwość głośnego szczekania „HAU HAU”.
„hiauu” to nie jest
szczekanie, które by mi odpowiadało.
Potrzebuję czegoś WIĘKSZEGO!
Co powiecie na „HAU HAU” powtórzone
i wielkimi literami?
function bark() {
// kod metody bark
}
function bark() {
QRZ\JïRV.ïD
HAU HAU
}
To jest niestandardowa
metoda bark, dostępna
wyłącznie w obiekcie spot.
Kiedy będzie już dostępna
w obiekcie, możemy ją
wywołać.
spot.bark();
Natomiast obiekt spot
korzysta z metody, dzięki
której szczeka „HAU HAU”.
Metoda bark dostępna
w prototypie nie jest
używana w obiekcie spot,
lecz wciąż korzystają
z niej obiekty fido i fluffy.
Kieł.
bark()
Prototyp psa
zostaje taki sam.
Poszukiwania metody bark
rozpoczynamy od obiektu spot.
I znajdujemy ją w nim, więc
nie musimy szukać jej dalej
w prototypie. Kiedy wywołamy tę
metodę, Kieł zaszczeka HAU HAU!
function run() {
// kod metody run
}
function wag() {
// kod metody wag
}
594
Rozdział 13
Ćwiczenie z prototypów
Tu narysuj swój diagram.
maker: "Ob.Fa.Ro"
Prototyp Robot
speak()
makeCoffee()
blinkLights()
name: "Robik"
Robot
function blinkLights() {
REVïXJDEï\VNDQLD
}
function speak() {
NRPXQLNDFMDJïRVRZD
}
function makeCoffee() {
// podawanie kawy
}
function makeCoffee() {
// kod parzenia kawy
}
name: "Robusia"
Robot
owner: "Dr. Morbius"
year: 1956
year: 1962
owner: Grzegorz Jetson
makeCoffee()
function cleanHouse() {
REVïXJDVSU]ÈWDQLD
}
onOffSwitch: true
To prototyp,
po którym mogą
dziedziczyć
Twoje roboty.
makeCoffee()
cleanHouse()
8âRİ\OLĤP\QDORGyZFHGLDJUDPRELHNWyZDOHNWRĤSU]\V]HGâL]XSHâQLHJRSRPLHV]Dâ
&]\PRİHV]SRPyFQDPJRRGWZRU]\þ"%ĐG]LHP\SRWU]HERZDOLGZyFKLQVWDQFMLSURWRW\SX
URERW-HGQċ]QLFKMHVW5RELNURERW]EXGRZDQ\ZURNXLQDOHİċF\GRGU0RUELXVD
5RELNMHVWZ\SRVDİRQ\ZHZâċF]QLNLSRWUDILFKRG]LþSRNDZĐGR6WDUEXFNVD0DP\
WDNİH5REXVLĐXWZRU]RQċZURNXNWyUDVSU]ċWDPLHV]NDQLH2EHFQLHQDOHİ\RQD
GR*U]HJRU]D-HWVRQD3RZRG]HQLD$MHV]F]HMHGQRPRİHVLĐ]GDU]\þİHQLHNWyUH
]PDJQHVLNyZZLGRF]Q\FKXGRâXVWURQ\EĐGċSRWU]HEQH
Magnesy z kodem
Get Programowanie w JavaScript Rusz głową! now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.