function F () { this.a = 1; this.b = 2; } let o = new F(); // {a: 1, b: 2} // add properties in F function's prototype F.prototype.b = 3; F.prototype.c = 4; console.log(o)Usando las herramientas de desarrollo de Chrome, encuentro el resultado de la siguiente manera:
Estoy realmente confundido con esta salida. Quién puede explicar el resultado.
Descargo de responsabilidad: no estoy completamente seguro de esta respuesta.
__proto__ se refiere al objeto que se está construyendo (es parte del constructor).
[[Prototype]] es el objeto que está destinado a crear un prototipo del objeto actual .
[[Prototype]] se refiere al prototipo interno con el que se crea cada objeto. No es accesible, por ejemplo
o.prototype.b devuelve undefined .
El __proto__ en desuso inicialmente no se llama y, cuando se llama, se llena con los valores de [[Prototype]] , de ahí la duplicación. Asi que,
o.__proto__.b devuelve 3 .
El método de acceso preferido es usar el método estático getPrototypeOf() de Object .
Object.getPrototypeOf(o).b devuelve 3 .