Object
è Eva, ed Function
è Adam, Adam ( Function
) usa il suo bone ( Function.prototype
) per creare Eve ( Object
). Allora chi ha creato Adam ( Function
)? - L'inventore del linguaggio JavaScript :-).
Secondo la risposta di utsaina, voglio aggiungere ulteriori informazioni utili.
La cosa più sorprendente per me è stata scoprire che Object.__proto__
punta Function.prototype
invece Object.prototype
, ma sono sicuro che ci sia una buona ragione per farlo :-)
Non dovrebbe essere. Object.__proto__
NON dovrebbe puntare a Object.prototype
. Invece, l'istanza di Object
o
, o.__proto__
dovrebbe puntare a Object.prototype
.
(Perdonami per aver usato i termini class
e instance
in JavaScript, ma tu lo sai :-)
Penso che la classe Object
stessa sia un esempio di Function
, ecco perché Object.__proto__ === Function.prototype
. Pertanto: Object
is Eve, ed Function
è Adam, Adam ( Function
) usa il suo bone ( Function.prototype
) per creare Eve ( Object
).
Inoltre, anche la classe Function
stessa è un'istanza di Function
se stessa, cioè è Function.__proto__ === Function.prototype
anche per questoFunction === Function.constructor
Inoltre, la classe regolare Cat
è un'istanza di Function
, cioè Cat.__proto__ === Function.prototype
.
Il motivo di cui sopra è, quando creiamo una classe in JavaScript, in realtà, stiamo solo creando una funzione, che dovrebbe essere un'istanza di Function
. Object
e Function
sono solo speciali, ma sono ancora classi, mentre Cat
è una classe regolare.
Di fatto, nel motore JavaScript di Google Chrome, i seguenti 4:
Function.prototype
Function.__proto__
Object.__proto__
Cat.__proto__
Sono tutti ===
(assolutamente uguali) per gli altri 3 e il loro valore èfunction 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
OK. Quindi chi crea lo speciale function Empty() {}
( Function.prototype
)? Pensaci :-)