Saya pikir, saya terlalu metaforis dan samar dengan jawaban sebelumnya. Klarifikasi mengikuti.
Sebuah instance dari Array, Boolean, Date, Function, Number, RegExp, String adalah sebuah Object tetapi ditingkatkan dengan metode dan properti yang spesifik untuk setiap tipe. Misalnya, sebuah array memiliki length
properti yang telah ditentukan sementara objek umum tidak.
javascript:alert([].length+'\n'+{}.length)
menampilkan
0
tidak terdefinisi
Secara intrinsik, juru bahasa FF Gecko juga membedakan antara Array dan Objek generik dengan perbedaan yang berbeda dalam mengevaluasi konstruksi bahasa.
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);
menampilkan
satu dua tiga
[Objek Objek]
["satu dua tiga"]
4. toSource () lupakan saya!
3 dan panjang saya!
({0: "one", 1: "two", 2: "three", a: 4})
dan 0 1 2 a
dan 0 1 2 a
.
Mengenai pernyataan bahwa semua objek adalah fungsi:
Tidaklah benar secara sintaksis maupun semantik untuk menggunakan instance objek arbitrer sebagai fungsi seperti 123()
atau "abc"()
atau []()
atau {}()
atau di obj()
mana obj
ada tipe selain Function
, jadi objek arbitrer INSTANCE bukanlah a Function
. Namun, jika diberi objek obj
dan tipenya Array, Boolean, Date, ...
, bagaimana obj
bisa menjadi sebagai Array, Boolean, Date, ...
? Apa itu Array, Boolean, Date, ...
?
javascript:
alert([Array, Boolean, Date, Function,
Number, Object, RegExp, String] . join('\n\n') );
menampilkan
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]
}
Dalam setiap kasus, tanpa keraguan, tipe objek bermanifestasi sebagai function
definisi, oleh karena itu pernyataan bahwa semua objek adalah fungsi! (Lidah di pipi adalah bahwa saya sengaja mengaburkan dan mengaburkan perbedaan contoh objek dengan tipe itu! Namun, ini menunjukkan "Anda tidak dapat memiliki satu tanpa yang lain", Objek dan Fungsi! Kapitalisasi menekankan tipe sebagai menentang contoh.)
Baik paradigma fungsional dan objek tampaknya menjadi dasar untuk pemrograman dan penerapan primitif bawaan tingkat rendah interpreter JS, seperti Math
dan JSON
dan true
.
javascript:alert([Math, JSON, true.toSource()].join("\n\n"));
menampilkan
[object Math]
[object JSON]
(new Boolean(true))
Pada saat pengembangan Javascript, gaya pemrograman objek-sentris (OOP - gaya Pemrograman Berorientasi Objek - "s" adalah permainan kata-kata saya!) Sedang digemari dan interpreter juga dinamai dengan Java untuk memberikan kredibilitas yang lebih besar . Teknik pemrograman fungsional diturunkan ke ujian yang lebih abstrak dan esoterik yang mempelajari teori Automata, Fungsi Rekursif, Bahasa Formal, dll. Dan dengan demikian tidak cocok. Namun, kekuatan dari pertimbangan formal ini jelas terlihat dalam Javascript terutama seperti yang diterapkan di mesin Gecko FF (mis. .toSource()
).
Definisi Objek untuk Fungsi sangat memuaskan karena didefinisikan sebagai relasi perulangan! didefinisikan menggunakan definisi itu sendiri!
function Function() { [native code] }
dan karena suatu fungsi adalah Objek, sentimen yang sama berlaku
function Object() { [native code] }
.
Sebagian besar definisi lain tidak sesuai dengan nilai terminal statis. Namun, eval()
adalah primitif yang sangat kuat sehingga String juga dapat menyematkan fungsionalitas arbitrer.
Perhatikan lagi, bahasa daerah yang digunakan di atas mengaburkan tipe objek dan perbedaan contoh.