Object
adalah Hawa, dan Function
Adam, Adam ( Function
) menggunakan tulangnya ( Function.prototype
) untuk membuat Hawa ( Object
). Lalu siapa yang menciptakan Adam (Function
)? - Penemu bahasa JavaScript :-).
Menurut jawaban utsaina, saya ingin menambahkan info yang lebih berguna.
Hal yang paling mengejutkan bagi saya adalah menemukan Object.__proto__
hal itu Function.prototype
, alih-alih Object.prototype
, tapi saya yakin ada alasan bagus untuk itu :-)
Seharusnya TIDAK. Object.__proto__
seharusnya TIDAK menunjuk ke Object.prototype
. Sebaliknya, contoh dari Object
o
, o.__proto__
harus menunjuk keObject.prototype
.
(Maafkan saya karena menggunakan ketentuan class
daninstance
dalam JavaScript, tetapi Anda tahu itu :-)
Saya pikir kelas Object
itu sendiri adalah contoh dari Function
, itu sebabnya Object.__proto__ === Function.prototype
. Karena itu: Object
adalah Hawa, dan Function
Adam, Adam ( Function
) menggunakan tulangnya ( Function.prototype
) untuk membuat Hawa (Object
).
Lebih jauh, bahkan kelas Function
itu sendiri adalah turunan dari Function
dirinya sendiri, yaituFunction.__proto__ === Function.prototype
sebabnyaFunction === Function.constructor
Lebih jauh lagi, kelas reguler Cat
adalah turunan dari Function
, yaitu Cat.__proto__ === Function.prototype
.
Alasan di atas adalah, ketika kita membuat kelas dalam JavaScript, sebenarnya, kita hanya membuat fungsi, yang seharusnya menjadi instance dari Function
. Object
dan Function
hanya istimewa, tetapi mereka masih kelas, sedangkan Cat
kelas reguler.
Faktanya, di mesin Google Chrome JavaScript, berikut 4:
Function.prototype
Function.__proto__
Object.__proto__
Cat.__proto__
Mereka semua ===
(sama dengan) 3 lainnya, dan nilainyafunction Empty() {}
> Function.prototype
function Empty() {}
> Function.__proto__
function Empty() {}
> Object.__proto__
function Empty() {}
> Cat.__proto__
function Empty() {}
> Function.prototype === Function.__proto__
true
> Function.__proto__ === Object.__proto__
true
> Object.__proto__ === Cat.__proto__
true
BAIK. Lalu siapa yang menciptakan special function Empty() {}
( Function.prototype
)? Pikirkan tentang itu :-)