__proto__
es va a ser estandarizado en ES6. Actualmente se encuentra en Appendix B of the ES6 draft lo que en la práctica significa que, si se implementa, debe tener la siguiente semántica.
__proto__
está disponible como un descriptor de acceso en Object.prototype
, lo que significa que todos los objetos pueden leerlo y escribirlo de forma predeterminada. Sin embargo, se puede eliminar de Object.prototype
(usando delete
). Una vez eliminado __proto__
funcionará como una propiedad de datos normal sin efectos secundarios en la configuración.
__proto__
es también una forma sintáctica especial en literales de objeto. Trabajará para configurar el [[Prototype]] incluso si se eliminó Object.prototype.__proto__
.
var p = {a: 1};
var o = {
__proto__: p,
b: 2
}
ES6 también introduce Object.setPrototypeOf
(no en el apéndice). Esto es preferible a la configuración __proto__
.
__proto__
está disponible en todos los navegadores modernos, including Internet Explorer 11.
Espero que esto sea cierto. ¿Sabes si ES6 permitirá derivar eficientemente de Array? –
__proto__ no está en una pista de estándares; en su lugar, Object.setPrototypeOf aprobado por ES6 para una mejor compatibilidad https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto –
Sí ES6 será compatible subclases integradas en clases nativas como Array. –