Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 3.466 pregleda

Najnovija ↓

Nasleđivanje u javascriptu 12.08.2012. u 00:44 · pre 173 meseca #1
Hteo bih da nasledim neki generički objekat, ali da svaki child objekat ima svoj niz definisan u parent-u. U primeru ispod kad kreiram Child "x2", on automatski ima sve vrednosti u nizu "collection"

Code (javascript):

function Parent() {
    var collection = [];
    this.add = function (i) {
        collection.push(i);
    }

    this.getCount = function () { return collection.length }
}

function Child() {
    Parent(this);
}
 
Child.prototype = new Parent();
Child.prototype.constructor = Child;

var x1 = new Child();
x1.add(1);
var x1Count = x1.getCount();

var x2 = new Child();
x2.add(1);
var x2Count = x1.getCount();
var x2Count = x1.getCount();
 


Dakle kako napraviti child ili parent tako da kad kažem "new Child()" taj objekat ima svoj (prazan) "collection" niz

Potpis
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
Re: Nasleđivanje u javascriptu 12.08.2012. u 09:29 · pre 173 meseca #2
Cao,

U funkciji Child je potrebno da pozoves funkciju Parent sto vec i radis. Medjutim moras da prosledis drugi kontekst toj funkciji. Kontekst objekta Child. U parent funkciji niz definisi sa this.collection umesto var collection.

Evo ispravljenog koda.

Code:
function Parent() {
    this.collection = [];
    this.add = function (i) {
        this.collection.push(i);
    }

    this.getCount = function () { return this.collection.length }
}

function Child() {
    Parent.call(this);
}
 
Child.prototype = new Parent();
Child.prototype.constructor = Child;

var x1 = new Child();
x1.add(1);
var x1Count = x1.getCount();

var x2 = new Child();
x2.add(2);
x2.add(3);

var x1Count = x1.getCount();
var x2Count = x2.getCount();

console.log(x1Count);
console.log(x2Count);

console.log(x1["collection"]);
console.log(x2["collection"]);


Jos jedna bitna stvar. Sve funkcije Parent objekta stavi na prototip kako ne bi imao nove instance funkcija za svaki novokreirani Child objekat. Ovako:

Code:

function Parent() {
    this.collection = [];
}

Parent.prototype.add = function (i) {
    this.collection.push(i);
}

Parent.prototype.getCount = function () { 
    return this.collection.length;
}

function Child() {
    Parent.call(this);
}
 
Child.prototype = new Parent();
Child.prototype.constructor = Child;

var x1 = new Child();
x1.add(1);
var x1Count = x1.getCount();

var x2 = new Child();
x2.add(2);
x2.add(3);

var x1Count = x1.getCount();
var x2Count = x2.getCount();

console.log(x1Count);
console.log(x2Count);

console.log(x1["collection"]);
console.log(x2["collection"]);


Re: Nasleđivanje u javascriptu 12.08.2012. u 09:45 · pre 173 meseca #3
postoji li mogućnost da "collection" ne bude javno vidljiv?
Ne bih želeo da može direktno da se doda u "collection" sa "push", već da dodavanje mora da bude preko "add" funkcije.
Potpis
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
Re: Nasleđivanje u javascriptu 12.08.2012. u 18:36 · pre 173 meseca #4
Nevezano za tvoj post, preporučujem ti da baciš pogled na ova dva članka:

http://css.dzone.com/articles/javascript-does-not-need
http://css.dzone.com/articles/javascript-inheritance-example

Tu ćeš naći dosta korisnih stvari na temu izvodjenja u JavaScript-u, a i uopšte objektno-orijentisanog pristupa.
Re: Nasleđivanje u javascriptu 21.08.2012. u 13:32 · pre 172 meseca #5
Citat:
vujkev:
postoji li mogućnost da "collection" ne bude javno vidljiv?

Mogu će je, ali tada moras da napravis privileged funkcije u Parent-u.
Code:
function Parent() {
    var _collection = _collection || [];

    this.add = function (i) {
        _collection.push(i);
    }

    this.getCollection = function () {
        return _collection;
    };

    this.getCount = function () {
        return _collection.length;
    }
}

function Child() {
    Parent.call(this);
}
 
Child.prototype = new Parent();
Child.prototype.constructor = Child;

var x1 = new Child();
x1.add(1);
x1.add(3);
x1.add(5);
var x1Count = x1.getCount();

var x2 = new Child();
x2.add(2);

var x1Count = x1.getCount();
var x2Count = x2.getCount();
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme