[javascript] toString pre vlastnosti objektu, ako na to?

Programovacie jazyky, rady, poradňa...
M142
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3118
Registrovaný: 22 mar 2006, 15:31

[javascript] toString pre vlastnosti objektu, ako na to?

Príspevok od používateľa M142 »

mam zaistit vypisanie vlastnosti objektu cez funkciu toString. vzdy ale ked sa ich snazim vypisat, tak vypise iba [object Object] alebo function toString() { [native code] }. nevie niekto ako na to? na webe som uz hladal, ale nic som nenasiel.

Kód: Vybrať všetko

var cr= new Array();

function Car(c,t,r) {
    this.color = c ;
    this.type = t;
    this.rok = r;
}

cr[0]= new Car("red","vw","1994");
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: [javascript] toString pre vlastnosti objektu, ako na to?

Príspevok od používateľa audiotrack »

neviem aké znalosti z OOP máš, tak neviem do akej hlbky to má zmysel vysvetlovať. Dôležité však je, že si tú metodu toString() musíš definovať, lebo pre objekt Car žiadna neexistuje (ono ani object Car neexistuje v javascripte, takže tak ako si ho vytvoril mu musíš aj vytvoriť všetky metody ktoré nie sú spoločné pre všeobecný objekt). Možnosti sú tri, jednoduchšia je tzv. Literal notation ktorá je v podstate rovnaká ako druhá možnosť:

Kód: Vybrať všetko

var cr= new Array();

function Car(c,t,r) {
    this.color = c ;
    this.type = t;
    this.rok = r;
	this.toString = function() {
		return this.color + " " + this.type + " " + this.rok;
	}

}


cr[0]= new Car("red","vw","1994");
document.write( cr[0].toString() );
(rozdiel je iba v syntaxi). Tretia možnosť je pomocou prototypovania, čo ti umožni pridávať metody triede aj mimo jej štruktúry:

Kód: Vybrať všetko

var cr= new Array();

function Car(c,t,r) {
    this.color = c ;
    this.type = t;
    this.rok = r;
}

Car.prototype.toString = function(){
	return this.color + " " + this.type + " " + this.rok;
}


cr[0]= new Car("red","vw","1994");
document.write( cr[0].toString() );
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: [javascript] toString pre vlastnosti objektu, ako na to?

Príspevok od používateľa weroro »

Ak sa môžem opýtať.
Ktorý z tých dvoch zápisov je lepší? Literal notation alebo prototype?
Ja to bohužiaľ celé chápem len z pohľadu ActionScriptu, kde sa to robí presne takto isto v oboch prípadoch, ale prototype sa používal iba vo verzii ActionScript 1 (samozrejme funguje aj v novších verziách), avšak samotný prototype bol zavrhnutý a nepoužíva sa. Sám používam výhradne Literal notation.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: [javascript] toString pre vlastnosti objektu, ako na to?

Príspevok od používateľa audiotrack »

prototypovanie je silná zbraň v dobrých rukách, lebo si dokážeš prepísať aj existujúce objekty, ako napríklad string. Na tomto je postavených veľa frameworkov. Dokážem si ale predstaviť aj riadne zverstvá keďže môžme meniť hotové objekty (prepísanie funkcií ich horšími variantami). Takže môj amatérsky názor je ten, že keď vieš programovať tak vieš čo je dobré a čo nie. Nedá sa to nejak zovšeobecniť na jednu vec, lebo záleží od okolností. Pristupovanie k objektu cez prototype je ale podstatne zdlhavejšia operácia, takže by som odporúčal prvý variant ak si objekt robíš sám. Ak robíš framework (a musíš ho napájať na objekty iných) tak nemáš inú možnosť ako variant dva.
Ale v js nie som moc silný, takže ak táram nechám sa poučiť :)
M142
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3118
Registrovaný: 22 mar 2006, 15:31

Re: [javascript] toString pre vlastnosti objektu, ako na to?

Príspevok od používateľa M142 »

dakujem, uz tomu chapem
Napísať odpoveď