9

¿Hay una diferencia entre Object.getPrototypeOf(obj) y obj.constructor.prototype? ¿O están estos dos haciendo referencia a lo mismo?es Object.getPrototypeOf() igual que Object.constructor.prototype en Javascript?

+1

Puedes enviar preguntas y respuestas útiles y también aceptar respuestas que resuelvan tus propias preguntas. Esto ayuda a organizar SO y también es una pequeña recompensa para aquellos que lo ayudaron. – hugomg

+1

@missingno Sus preguntas hasta ahora son bastante interesantes ... –

+1

@ ŠimeVidas: Aún merece el comentario repetitivo "0%": P – hugomg

Respuesta

9

NO

Devuelve el [[Prototype]] interna valor.

Por ejemplo:

var o = Object.create(null); 
Object.getPrototypeOf(o); // null 
o.constructor.prototype; // error 

var p = {}; 
var o = Object.create(p); 
Object.getPrototypeOf(o); // p 
o.constructor.prototype; // Object.prototype 

o.constructor.prototype sólo funciona con objetos creados a través new ConstructorFunction o donde se ha configurado manualmente la relación Prototype.prototype.constructor === Prototype.

2

No. En particular, la propiedad constructor de un objeto no siempre se establece en lo que se consideraría "correcto".

un ejemplo de dónde getPrototypeOf obras, sino .constructor.prototype no:

function F() { } 
F.prototype = { 
    foo: "bar" 
}; 

var obj = new F(); 

assert.equal(obj.constructor.prototype, Object.prototype); 
assert.equal(Object.getPrototypeOf(obj), F.prototype); 

También falla de escenarios típicos herencia de prototipos:

// G prototypally inherits from F 
function G() { } 
G.prototype = Object.create(F.prototype); 
// or: G.prototype = new F(); 

var obj2 = new G(); 

assert.equal(obj2.constructor.prototype, Object.prototype); 
assert.equal(Object.getPrototypeOf(obj2), G.prototype); 
assert.equal(Object.getPrototypeOf(Object.getPrototypeOf(obj2)), F.prototype); 
Cuestiones relacionadas