Ich denke, ich bin zu metaphorisch und kryptisch mit vorheriger Antwort. Klarstellung folgt.
Eine Instanz von Array, Boolean, Date, Function, Number, RegExp, String ist ein Objekt, das jedoch um Methoden und Eigenschaften erweitert wurde, die für jeden Typ spezifisch sind. Ein Array verfügt beispielsweise über eine vordefinierte length
Eigenschaft, während dies bei generischen Objekten nicht der Fall ist .
javascript:alert([].length+'\n'+{}.length)
Anzeigen
0
nicht definiert
Eigentlich unterscheidet der FF-Gecko-Interpreter auch zwischen Arrays und generischen Objekten mit deutlichen Unterschieden bei der Bewertung von Sprachkonstrukten.
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);
Anzeigen
eins zwei drei
[Objekt Objekt]
["eins zwei drei"]
4 .toSource () hat mich vergessen!
3 und meine Länge!
({0: "eins", 1: "zwei", 2: "drei", a: 4})
und 0 1 2 a
und 0 1 2 a
.
In Bezug auf die Aussage, dass alle Objekte Funktionen sind:
Es ist weder syntaktisch noch semantisch korrekt, eine beliebige Objektinstanz als Funktion wie 123()
oder "abc"()
oder []()
oder {}()
oder obj()
wo obj
ein anderer Typ als ist Function
, zu verwenden, sodass ein beliebiges Objekt INSTANCE kein a ist Function
. Allerdings ist es eine Aufgabe gegeben obj
und es Typ als Array, Boolean, Date, ...
, wie kam obj
kommen als zu sein Array, Boolean, Date, ...
? Was ist ein Array, Boolean, Date, ...
?
javascript:
alert([Array, Boolean, Date, Function,
Number, Object, RegExp, String] . join('\n\n') );
Anzeigen
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 jedem Fall manifestiert sich der Objekttyp ohne Mehrdeutigkeit als function
Definition, daher die Aussage, dass alle Objekte Funktionen sind! (Die Zunge in der Wange ist, dass ich absichtlich die Unterscheidung einer Objektinstanz mit der ihres Typs verdeckt und verwischt habe! Dennoch zeigt dies "Sie können keine ohne die andere haben", Objekt und Funktion! Die Großschreibung betont den Typ als gegen Instanz.)
Sowohl ein Funktions- als auch ein Objektparadigma scheinen für die Programmierung und Implementierung der integrierten Grundelemente auf niedriger Ebene des JS-Interpreters wie Math
und JSON
und von grundlegender Bedeutung zu sein true
.
javascript:alert([Math, JSON, true.toSource()].join("\n\n"));
Anzeigen
[object Math]
[object JSON]
(new Boolean(true))
Zum Zeitpunkt der Entwicklung von Javascript war ein objektzentrierter Programmierstil (OOPs - Object Oriented Programming Style - das "'s" ist mein eigenes Wortspiel!) In Mode und der Interpreter wurde ähnlich mit Java getauft, um ihm mehr Glaubwürdigkeit zu verleihen . Funktionale Programmiertechniken wurden zu abstrakteren und esoterischeren Untersuchungen verbannt, die die Theorien von Automaten, rekursiven Funktionen, formalen Sprachen usw. studierten, und als solche nicht so schmackhaft. Die Stärken dieser formalen Überlegungen zeigen sich jedoch deutlich in Javascript, insbesondere in der Gecko-Engine von FF (dh .toSource()
).
Die Objektdefinition für Funktion ist besonders zufriedenstellend, da sie als Wiederholungsrelation definiert ist! definiert mit seiner eigenen Definition!
function Function() { [native code] }
und da eine Funktion ein Objekt ist, gilt das gleiche Gefühl für
function Object() { [native code] }
.
Die meisten anderen Definitionen basieren auf einem statischen Endwert. Ist eval()
jedoch ein besonders leistungsfähiges Grundelement und daher kann ein String auch beliebige Funktionen einbetten.
Beachten Sie erneut, dass die oben verwendete Umgangssprache den Objekttyp und die Instanzunterscheidung verdeckt.