Autor Zpráva
eXMarty
Profil
Ahoj,
snžím se v JavaScriptu (mimo jiné) prokousat definicí vlastního typu (=vlastního objektu - jak jsem pochopil z různých návodů knih či podobně)

Definuji si tedy vlastní objekt (=typ)
var typBodu = function(  ) {
            this.jmeno = '';
            this.popis = '';
            this.styl = '';
            this.souradniceX = 0;
            this.souradniceY = 0;
            this.datumZmeny = '';
}
poté jedné proměnné přiradím instanci tohoto objektu
var jedenBod = new typBodu();

Chtěl bych si ale vytvořit celé pole (Array) objektu. Tedy v mé (zatím omezené JavaScript-programátorsky omezené myšlence) bych to viděl nějak takto:
var body = new Array(new typBodu())

Ale podle toho když jsem to tak zkusil, vytvořím tímto sice pole, kde je prvním prvkem můj typ (=objekt). Poradíte prosím někdo zkušený jak na to? Vpodstatě bych potřeboval něco ve smyslu var body = new ArrayOf(typBodu) - vím, že je nesmysl, ale pro názornost - věřím že znalí pochopíte. Nebo jak by se typ proměnné měl vytvořit správně?

Díky moc
(snažím se v tom zorientovat dlouho ale dost sem se ztratil v pojmech pole, konstruktor, třída, objekt, metoda, ... :( )
Dan Charousek
Profil
Pokud jsem pochopil správně, tak chceš získat pole attributů daného objektu. V tom prípadě stačí objekt projet cyklem for s klíčovým slůvkem IN. Viz. ukázka.
To co s atributy uděláš je jedno, můžeš si je klidně uložit do nějakého svého pole.
juriad
Profil
eXMarty:
Pole jakýchkoli prvků definuješ takto. Nemusíš používat konstruktor, můžeš to zapsat také pomocí těch hranatých závorek.
var body = [];
V JS nikde nedefinuješ typy, takže všechna pole se definují stejně. Co v nich bude záleží na tom, co do nich vložíš. Dokonce do nich můžeš vkládat navzájem různé věci - čísla, stringy a body, byť to není něco hodného doporučení.

Toto vloží bod do pole:
body.push(jedenBod);

Mimochodem, je konvence konstruktory pojmenovávat velkým písmenem.
eXMarty
Profil
Dan Charousek, juriad:
Pánové, děkuji Vám moc. Popravdě k tomuto, že každému prvku v poli budu muset definovat typ zvlášť (při procházení cyklemfor), k tomu jsem došel, ale přišlo mi to dost zvláštní a považoval jsem to za nesprávné použití. Opravdu ještě jednou oběma díky za reakce, jdu tedy začít a uvidíme, kde se zaseknu dále.

PS: o konvenci psaní "funkce" konstruktoru s počátečním velkým písmenem jsem se už dočetl, a budu se snažit používat - i za to děkuji, alespoň při dalších dotazech nebudu třeba vypadat jako totální jelito, ale třeba jen jako běžný jelito. Díky

ŘEŠENÍ:
var TypBod = function() {
  this.jmeno = '';
  this.popis = '';
  this.styl = '';
  this.souradniceX = 0;
  this.souradniceY = 0;
  this.datumZmeny = '';
};
var vsechnyBody = [];


for(i= 0;i<10; i++){
  var jedenBod = new TypBod();
    jedenBod.jmeno = 'jméno bodu ' + i;
    jedenBod.popis = 'popisek bodu' + i;
    jedenBod.styl = 'styl_' + i;
    jedenBod.souradniceX = 15 + i/10;
    jedenBod.souradniceY = 50 + i/10;
    jedenBod.datumZmeny = '2015-01-0' + i;
  vsechnyBody.push(jedenBod);
}

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: