JavaScript and Object Oriented Programming (OOP)
|
Object Constructor a "prototyping"
Vo svete OOP su predchadzajuce sposoby definovania objektov limitovane v mnohych situaciach. Potrebujeme sposob, ako vytvorit objektovy typ, ktory moze byt pouzity viackrat, bez potreby ho predefinovat pred kazdym pouzitim v urcitej situacii. Standradnym sposobom ako to dosiahnut je pouzitie "Object Constructor function"
"Object constructor" je skoro reguralna JavaScriptova funkcia, teda je aspon tak robustna ( napriklad v definovani parametrov, volani inych funkcii). Rozdiel medzi nimi dvoma je ze construktorova funkcia je volana cez "new" operator (ukazeme neskor). Zalozenim nasho objektu (jeho definovnia) na syntaxe funkcie dostaneme robustnost tiez.
Pouzime realny objekt "macka" ako priklad. Vlastnostou macky moze byt jej farba alebo meno. Metoda moze byt "mnau". Dolezita vec je, ze si musime uvedomit, ze rozna macka ma ine meno, pripadne farbu a vysledok (zvku) mnau funkcie. Na vytvorenie objektoveho typu ktory obhospodaruje tieto veci potrebujeme znacnu davku flexibility, pouzijeme objektovy konstruktor.:
<script language="javascript" type="text/javascript">
function cat(name) {
this.name = cica;
this.talk = function() {
alert( this.name + " povedz mnau!" )
}
}
cat1 = new cat("felix")
cat1.talk() //alerts "felix says meeow!"
cat2 = new cat("ginger")
cat2.talk() //alerts "ginger says meeow!"
</script >
Funkcia "macka()" je "object constructor". Sme schopi vytvorit mnoho instancii "macky" a teda je to flexibilne (mozu mat napr. ine mena). Konstruktory vytvaraju zaklady pre obejkty, nie objekty.
Pridavanie metod k takto vytvorenym objektom
"Prototype" je typ dedicnosti v JavaScripte. Pouzivame ho, ak chceme, aby objekt zdedil metodu po tom, co bol vytvoreny.
Rozsirme nasu macku vyssie spomenutu s dalsou metodou, ktore bude menit jej meno pouzitim prototypingu:
<script language="javascript" type="text/javascript">
cat.prototype.changeName = function(name) {
this.name = name;
}
firstCat = new cat("pursur")
firstCat.changeName("Bill")
firstCat.talk() //alerts "Bill says meeow!"
</script >
Ako vidite, pouzil som klucove slovo "prototype" ihned za menom objektu aby som zmenil jeho funkcnost. Metoda changeName() je teraz zdielana medzi vsetkymi instanciami macky.
Rovnako, tonto pristup je mozne pouzit aj v objektoch, ktore su preddefinovane v JavaScripte. Moznosti su nekonecne.
|
|
|