objetos - ¿Cómo acceder al objeto prototipo en javascript?
recorrer array de objetos javascript (4)
Parece que
Object.getPrototypeOf(passedObject);
Trabajará para esto, y es compatible con los navegadores modernos.
Aquí están las tablas de compatibilidad en MDN
En todos los artículos está escrito que JavaScript es un lenguaje basado en prototipos, lo que significa que cada objeto tiene un prototipo (o, más precisamente, una cadena de prototipos).
Hasta ahora, he intentado el siguiente fragmento de código:
var F = function();
F.prototype.member1 = 1;
var object1 = new F();
console.log(object1.member1); // prints 1
¿Cómo puedo acceder al objeto prototipo de object1
? ¿Existe una forma neutral de hacer eso con el navegador (es decir, sin confiar en la propiedad __proto__
? Visto this enlace, pero tal vez haya nuevos desarrollos desde 2010) Si no puedo, ¿podría compartir la razón detrás del capó?
var F = function();
F.prototype.member1 = 1;
F.prototype.getClass = F;
var object1 = new F();
object1.member1 = 2;
console.log(object1.getClass.prototype.member1); // prints 1
console.log(object1.member1); // prints 2
var F = function(){};
var object1 = new F();
alert(object1.constructor === F);
alert(object1.constructor.prototype === F.prototype);
var f = function();
var instance = new f();
Si conoce el nombre de la función de clase de instance
, simplemente puede acceder al prototipo como:
var prototype = f.prototype;
prototype.someMember = someValue;
Si no lo haces
1)
var prototype = Object.getPrototypeOf(instance);
prototype.someMember = someValue;
2) o
var prototype = instance.__proto__;
prototype.someMember = someValue;
3) o
var prototype = instance.constructor.prototype; // works only if constructor is properly assigned and not modified
prototype.someMember = someValue;
Para compatibilidad, puede colocar en su código el siguiente fragmento de código (y usar siempre Object.getPrototypeOf(instance)
para devolver el prototipo):
if(!Object.getPrototypeOf) {
if(({}).__proto__ === Object.prototype && ([]).__proto__ === Array.prototype) {
Object.getPrototypeOf = function getPrototypeOf(object) {
return object.__proto__;
};
} else {
Object.getPrototypeOf = function getPrototypeOf(object) {
// May break if the constructor has been changed or removed
return object.constructor ? object.constructor.prototype : void 0;
};
}
}
ACTUALIZAR:
Según ECMA-262, la 6ta edición (junio de 2015) __proto__
propiedad está estandarizada como característica adicional para los navegadores web. Todas las últimas ediciones de los mejores navegadores lo soportan ahora. Lea más sobre __proto__
:
EDMA-262 6ª Edición (junio de 2015):
B.2.2.1 Object.prototype.__proto__