Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

133
Vistas
Why JavaScript construction function default prototype is Object.Prototype instead of Function.prototype?

When function object is used as constructor then proper prototype chain is maintained as marked in point 1 and point 2.

But as shown in following code new instances prototypes are skipping Function.prototype and directly inheriting from Object.prototype. Is there specific reason for that?

Function.prototype.extraFun = function(){console.log('funny function')};

function Thing(name){
    this.name = name;
}

Thing.prototype.specs = function(){
    return `name: ${this.name}`;
}

var table = new Thing('wooden table');

table.__proto__ == Thing.prototype //true       [OK]            (1)
Thing.__proto__ == Function.prototype //true    [OK]            (2)  

//it should show follow the above rythm
Function.__proto__ == Object.prototype //false               (A)

//why 
Function.__proto__ == Object.__proto__ //true                (B)

//it should be false
table.__proto__.__proto__ == Object.prototype // true             (3)  

//it should be true because function object is instance of Function NOT Object directly
table.__proto__.__proto__ == Function.prototype //false            (4)

But issue is why point 3 is true and point 4 is false. Further more Point A and B are deviate from normal order unlike point 1 and 2

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

table.__proto__ == Thing.prototype //true       [OK]            (1)
Thing.__proto__ == Function.prototype //true    [OK]            (2)  

//it should show follow the above rythm
Function.__proto__ == Object.prototype //false               (A)

//why 
Function.__proto__ == Object.__proto__ //true                (B)

Not really. table is the odd one out. The rythm goes like this:

Thing.__proto__ == Function.prototype //true    [OK]
Function.__proto__ == Function.prototype //true [OK]
Object.__proto__ == Function.prototype //true   [OK]

Can you see what these have in common? They're constructor functions.

table.__proto__ == Thing.prototype //true       [OK]            (1)
Thing.__proto__ == Function.prototype //true    [OK]            (2) 
table.__proto__.__proto__ == Object.prototype // should be false but is true?
table.__proto__.__proto__ == Function.prototype // should be true but is false?

No, there is no function object (that would be an instance of Function, and inherit from Function.prototype) involved in the prototype chain of table. You seem to be thinking that Thing.prototype and Thing.__proto__ are the same thing - but no, they're absolutely not.

The inheritance chain simply goes

           table.__proto__ == Thing.prototype
 Thing.prototype.__proto__ == Object.prototype
Object.prototype.__proto__ == null
about 4 years ago · Juan Pablo Isaza Denunciar

0

Constructors (Thing, Function, Object) are functions, so they have Function.prototype in their prototype chain.

Function.prototype and Thing.prototype inherit from Object.prototype:

enter image description here

The lines represent .__proto__ dependencies (upwards).

See How does JavaScript prototype work?, where I also posted an answer.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda