[ wex-alpha @ 29.03.2013. 17:45 ] @
Imam sljedeci kod:

Code:

//Main object 
        function Pet(name, species, hello) {
            this.name = name;
            this.species = species;
            this.hello = hello;
        }

Pet.prototype = {
            sayHello: function () {
                alert(this.hello + " hello from normal pet");
            }
        }


//Cat prototype
        function Cat(name, hello, breed, whiskerLength) {
            Pet.call(this, name, "cat", hello);
            this.breed = breed;
            this.whiskerLength = whiskerLength;
        }

        Cat.prototype = new Pet();
        Cat.prototype.catNap = function () {
            alert(this.name + ": zzzzz...");
        }

        Cat.prototype.sayHello = function () { //just an overide of Pets sayHello
            alert(this.hello + " hello from a cat..");
        }






Zanima me objasnjenje sta radi ovaj dio koda:

Code:

Pet.call(this, name, "cat", hello);


Koliko sam shvatio, kaze da pri kreiranju prototype, da koristi od Base objekta navedene properije. U ovom slucaju Base objekt je Pet. Dakle koristi name i hello koji su definisani u Pet-u????

Sta predstavlja "cat" u istom kodu?

[ dusans @ 29.03.2013. 18:04 ] @
1. To ti je nešto kao poziv nasleđenog konstruktora.
2. Jeste, koristi "propertije" koji su definisani u Pet-u, tj. "nasleđuje" ih.
[ Nikola Poša @ 30.03.2013. 10:35 ] @
call omogućava da pozoveš funkciju u kontekstu nekog drugog objekta. U tom primeru, kad pozoveš Pet.call(), prosleđujući mu Cat instancu, this u funkciji (konstruktoru) Pet će se odnositi upravo na tu Cat instancu, pa ćeš praktično menjati property-je tog objekta.

A što se tiče tog "cat", ta vrednost će biti prosleđena kao drugi argument Pet kontruktoru (species parametar).

U primeru kojeg si post-ovao, Pet bi bila neka apstraktna klasa, dok bi Cat i npr. Dog bile njene konkretne implementacije. One bi u slučaju tog species property-je imale te neke default-ne, fikse vrednosti, "cat", "dog", itd.