Newsgroup: it.comp.lang.javascript
Titolo: che tipo di oggetto è questo?

l'oggetto seguente STAR,che cos'č? E' un array ?
 
grazie
 
 
var star = {};
 
function Star(constell,type,specclass,magnitude) {
    this.constellation = constell;
    this.type = type;
    this.spectralClass = specclass;
    this.mag  = magnitude;
}
 
star["Polaris"] = new Star("Ursa Minor","Double/Cepheid","F7",2.0);
star["Mizar"] = new Star("Ursa Major","Spectroscopic Binary","A1 V",2.3);
star["Aldebaran"] = new Star("Taurus","Irregular Variable","K5 III",0.85);
star["Rigel"] = new Star("Orion","Supergiant with Companion","B8 Ia",0.12);
star["Castor"] = new Star("Gemini","Multiple/Spectroscopic","A1 V",1.58);
star["Albireo"] = new Star("Cygnus","Double","K3 II",3.1);
star["Acrux"] = new Star("Crux","Double","B1 IV",0.8);
star["Gemma"] = new Star("Corona Borealis","Eclipsing Binary","A0 V",2.23);
star["Procyon"] = new Star("Canis Minor","Double","F5 IV",0.38);
star["Sirius"] = new Star("Canis Major","Double","A1 V",-1.46);
star["Rigil Kentaurus"] = new Star("Centaurus","Double","G2 V",-0.01);
star["Deneb"] = new Star("Cygnus","Supergiant","A2 Ia",1.25);
star["Vega"] = new Star("Lyra","White Dwarf","A0 V",0.03);
star["Altair"] = new Star("Aquila","White Dwarf","A7 V",0.77);
 
 

 function Star(constell,type,specclass,magnitude) {
 
E` un dizionario. In Javascript quasi tutto e` un oggetto, quindi e` 
anche un oggetto, in cui puoi definire funzioni (metodi), quindi diventa 
una specie di classe.
 
Ma la OOP in JS e` leggermente diversa da quella dei linguaggi piu` 
conosciuti, quindi la sintassi lascia un po' interdetti. :)
 
Bye.
 

 l'oggetto seguente STAR,che cos'è? E' un array ?
 
No, è un `Object`. Ovvero un oggetto semplice. Ogni oggetto in
JavaScript, array compresi, derivano da questo:
 
    console.log(new Array() instanceof Array) // true
    console.log(new Array() instanceof Object) // true
 
Esattamente come per gli array esiste l'object initalizer (o literal):
 
    var myarray = ["foo", "bar"]
 
Che altrimenti puoi scrivere usando:
 
    var myarray = new Array("foo", "bar")
 
Anche per gli oggetti puoi fare lo stesso. Quindi:
 
    var star = {}
 
È equivalente a:
 
    var star = new Object()
 
Quello che probabilmente ti ha confuso è la "square bracket notation"
invece della classica "dot notation". In pratica in JavaScript puoi
accedere alle proprietà di un oggetto in entrambi i modi. Ad esempio,
queste due sintassi sono equivalenti:
 
    window.alert("Hello World!")
 
    window["alert"]("Hello World!")
 
Quindi nel caso del tuo oggetto potevano tranquillamente fare:
 
    star.Mizar = new Star(...)
    star.Aldebaran = new Star(...)
    // etc
 
Per poi comunque potervi accedere in ambo i modi (dot o square bracket
notation).
 
La square bracket notation è utile soprattutto quando vuoi impostare una
proprietà con caratteri non ammessi dalla sintassi JavaScript. Ad
esempio se contiene spazi.
 
Sfortunatamente la square bracket notation porta, soprattutto a chi è
agli inizi, confusione, pensando che in JS esistano "array associativi",
e quindi a pensare che:
 
    var myarray = [];
 
    myarray["foo"] = 1;
    myarray["bar"] = 2;
 
Serva a creare un array simile. In realtà non è così, infatti se
interroghi la proprietà `length` otterrai un bel 0 invece che 2 come
magari ti aspettavi. Questo perché non hai aggiunto alcun elemento
all'array; hai piuttosto aggiunto proprietà all'oggetto.

    // etc
 
 
ma Mizar,Aldebaran....etc....sono quindi proprietà dell'oggetto STAR ?
 
 
 

 Alessandro, ovvero coppie chiave / valore.
 
Ok,adesso ho capito (che confusione però... questa "square bracket 
notation",in questo caso,coincide  anche con la solita sintassi degli array 
associativi,visto che mi dici che Mizar è anche una chiave oltre che una 
proprietà...)
 
ciao 
 
 

> proprietà...)
 
Dimentichiamo, come dicevo, gli "array associativi".
 
"Mizar" nel tuo esempio di partenza è il nome della proprietà e come 
valore ha un'istanza dell'oggetto "Star".
 
In è così che devi vedere un oggetto JavaScript, come coppie nome / 
valore: i "metodi" sono semplicemente delle proprietà che come valore 
hanno una funzione.
 
Fammi sapere se ho dipanato qualche dubbio o se ti ho complicato la 
questione.
 

 un oggetto e da Object deriva (vedi suo esempio).
 
Post scriptum.
 
Gli Array gli ho lasciati volutamente da parte: arriviamoci poi se ti è 
chiaro tutto quanto detto prima sugli oggetti.

 chiaro tutto quanto detto prima sugli oggetti.
 
sě č tutto chiaro ( Ps: io conosco php e c#  e i relativi array associativi) 
 
 

 - see in 00index.htm
 Dates - miscdate.htm estrdate.htm js-dates.htm pas-time.htm critdate.htm etc.

 proprietà...)
 
No, Mizar è solo una proprietà. Ma in JavaScript le proprietà si possono
referenziare in due modi, sia tramite la classica dot notation, sia
tramite la square bracket notation. Nel secondo caso usi il nome della
proprietà a mo' di chiave.