|
|
Jak jsme si již v minulých dílech řekli, jestliže engine javascriptu nenajde vlastní vlastnost, hledá ji ve vlastnostech prototype.
Zkusme se zaměřit na následující příklad:
function Data(den){
this.den=den; }
Data. prototype.den=”Neděle”;
Zkuste se zamyslet nad tím co se vypíše jestliže budu definovat nový objekt Data a posléze zavolám proměnnou den:
var objekt=new Data(”Pondělí”);
dowument.write(objekt.den);
Čekali jste, že se vypíše slovo Neděle? Tak tomu ve skutečnosti není, v konstruktoru objektu má proměnná den stanovenou hodnotu Pondělí a Tudíž se vypíše slovo Pondělí.
Ovšem pokud smažete vlastnost den, tak prototypová vlastnost den stále existuje a jakoby prosvítá v pozadí:
delete objekt.den;
document.write(objekt.den);
Výsledek bude slovo Neděle.
Pokud smažete vlastnost den, v prototypové vlastnosti si můžete vždy vytvořit svou novou vlastnost.
Jak možná víte pole můžeme procházet pomocí “speciálního” cyklu for in. Například takto:
var a=["a","b","c"];
for (var i in a) {
document.write(a[i]);
}
Pole jsou také určitým typem objektu, takže podobnou iteraci můžeme využít při procházení vlastností objektu:
var o = {o1: 1, o2: 2};
for (var i in o) {document.write(i + ‘=’ + o[i]);
}
Výsledek bude o1=1 o2=2
Jak vidíte objekt je definován literální cestou. Iterační procházení vlastnostmi objektu má však i své stinné stránky, například:
Všechny výše uvedené metody si ukážeme, povíme si jak a kdy je použít přímo na trefném příkladu:
function Auto(typ, barva) {
this.typ = typ;
this.barva = barva;
this.metoda = function(){return 1;}
}
Auto.prototype.cena = 450000;
Auto.prototype.rok_vyroby = 2009;
Vytvoříme objekt našeho Auta:
var auticko=new Auto(”Škoda Roomster”,”červená”);
Nyní projdeme všechny vlastnosti objektu Auto pomocí cyklu for in, objeví se všechny proměnné i s prototypovými vlastnostmi:
for (var vlastnost in auticko) {
document.write(vlastnost + ‘ = ‘ + auticko[vlastnost]+”<br/>”);
}
Výsledek bude:
typ = Škoda Roomster
barva=červená
metoda = function(){return 1;}
cena = 450000
rok_vyroby=2009
Pokud chcete zjistit která proměnná je vlastní(tedy není uvedená v prototype) použijte metodu hasOwnProperty():
auticko.hasOwnProperty(’typ’) ;
Výsledek bude true , toto je vlastní vlastnost
auticko.hasOwnProperty(’cena’) ;
Výsledek bude true , toto není vlastní vlastnost, je dná se o prototypovou vlastnost
Nyní budeme chtít vypsat pouze vlastní hodnoty objektu:
for (var vlastnost in auticko) {
if (auticko.hasOwnProperty(vlastnost)) {
document.write(vlastnost + ‘ = ‘ + auticko[vlastnost]+”<br/>”);
}}
Výsledek bude:
typ = Škoda Roomster
barva=červená
metoda = function(){return 1;}
O programování a všem okolo využívá WordPress MU a běží na Blog.zive.cz. Vytvořte si svůj vlastní blog
Sledování přes RSS: články
a komentáře
Partnerská sekce pro IT profesionály:
Microsoft TechNet/MSDN