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.prototypeinvece 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 classe instancein JavaScript, ma tu lo sai :-)
Penso che la classe Objectstessa sia un esempio di Function, ecco perché Object.__proto__ === Function.prototype. Pertanto: Objectis Eve, ed Functionè Adam, Adam ( Function) usa il suo bone ( Function.prototype) per creare Eve ( Object).
Inoltre, anche la classe Functionstessa è un'istanza di Functionse stessa, cioè è Function.__proto__ === Function.prototypeanche 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. Objecte Functionsono 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 :-)