recorrer objetos objeto new eliminar elemento ejemplos crear buscar array agregar javascript prototype prototypal-inheritance

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__ :