Mi crede, anch'io metaforico e criptico con la risposta precedente. Il chiarimento segue.
Un'istanza di Array, Boolean, Date, Function, Number, RegExp, String è un oggetto ma arricchito con metodi e proprietà specifici per ciascun tipo. Ad esempio, un array ha una proprietà predefinita length
mentre gli oggetti generici no.
javascript:alert([].length+'\n'+{}.length)
display
0
undefined
intrinseca, l'interprete FF Gecko distingue inoltre tra array e oggetti generici con differenze distinte valutano costrutti linguistici.
javascript:
ra=[ "one", "two", "three"]; ra.a=4;
ob={0:"one", 1:"two", 2:"three"}; ob.a=4;
alert(
ra +"\n\n"+
ob +"\n\n"+
ra.toSource() +"\n\n"+
ra.a +"\t .toSource() forgot me! \n\n"+
ra.length +"\t and my length! \n\n"+
ob.toSource());
ps=""; for(i in ra)ps+=i+" "; alert(ps); /* NB .length is missing! */
ps=""; for(i in ob)ps+=i+" "; alert(ps);
visualizzazione
one,two,three
[object Object]
["one", "two", "three"]
4 .toSource() forgot me!
3 and my length!
({0:"one", 1:"two", 2:"three", a:4})
e 0 1 2 a
e 0 1 2 a
.
quanto riguarda la situazione che tutti gli oggetti sono funzioni:
Non è né sintatticamente né semanticamente corretto utilizzare un'istanza oggetto arbitrario come una funzione come 123()
o "abc"()
o []()
o {}()
o obj()
dove obj
è un tipo diverso da Function
, quindi un oggetto arbitrario INSTANCE non è un Function
. Tuttavia, dato un oggetto obj
ed è tipo come Array, Boolean, Date, ...
, come è stato obj
come Array, Boolean, Date, ...
? Che cos'è un Array, Boolean, Date, ...
?
javascript:
alert([Array, Boolean, Date, Function,
Number, Object, RegExp, String] . join('\n\n'));
display
function Array() {
[native code]
}
function Boolean() {
[native code]
}
function Date() {
[native code]
}
function Function() {
[native code]
}
function Number() {
[native code]
}
function Object() {
[native code]
}
function RegExp() {
[native code]
}
function String() {
[native code]
}
In ogni caso, senza equivoci, il tipo di oggetto manifesta come una definizione function
, quindi l'affermazione che tutti gli oggetti sono funzioni! (La lingua scherzata è che ho intenzionalmente oscurato e offuscato la distinzione di un'istanza di oggetto con quella del suo tipo! Tuttavia, questo mostra "non puoi averne uno senza l'altro", Oggetto e funzione! oppongono esempio.)
sia un paradigma funzionale ed oggetto sembrano essere fondamentale per la programmazione e l'attuazione delle primitive incorporate JS interprete basso livello, come Math
e JSON
e true
.
javascript:alert([Math, JSON, true.toSource()].join("\n\n"));
display
[object Math]
[object JSON]
(new Boolean(true))
Al momento dello sviluppo di Javascript, uno stile di programmazione object-centric (di OOP - Object Oriented stile di programmazione - la "s '" è il mio gioco di parole !) era in voga e l'interprete è stato similmente battezzato con Java per dargli maggiore credibilità. Le tecniche di programmazione funzionale sono state relegate a esami più astratti ed esoterici studiando le teorie degli automi, delle funzioni ricorsive, delle lingue formali, ecc. E in quanto tali non sono accettabili. Tuttavia, i punti di forza di queste considerazioni formali si manifestano chiaramente in Javascript, in particolare come implementate nel motore Gecko di FF (ad esempio .toSource()
).
La definizione oggetto per la funzione è particolarmente soddisfacente per esso è definito come una relazione di ricorrenza! definito utilizzando la propria definizione!
function Function() { [native code] }
e dal momento che una funzione è un oggetto lo stesso sentimento vale per
function Object() { [native code] }
.
La maggior parte delle altre definizioni è sospesa su un valore di terminale statico. Tuttavia, eval()
è una primitiva particolarmente potente e quindi una stringa può anche incorporare funzionalità arbitrarie.
Nota ancora, il vernacolo usato sopra oscura il tipo di oggetto e la distinzione di istanza.
myArray.length restituisce un indice/chiave numerica dell'ultimo elemento nella matrice ma non il numero effettivo di elementi. Le proprietà dell'oggetto Array non sono uguali ai valori dell'array? –
Stavo solo cercando di illustrare la semantica voluta dell'oggetto Array che viene abusato se lo tratti come un normale oggetto. L'articolo collegato fa un lavoro migliore però :) –
La prossima volta che qualcuno dice che JavaScript è un buon linguaggio con cui svilupparlo, gli mostrerò questo esempio. Grazie. –