Son ¿Hay algún ejemplo del mundo real de una gran biblioteca moderna que sea incompatible con la extensión Object.prototype?
Sí, recuerdo problemas con jQuery, -que es una de las menos intrusivo bibliotecas- por ejemplo:
Otro caso que lo que recuerdo es que alguien agregó una función load
al objeto Object.prototype
, y causó problemas con el evento $().load
:
// DON'T DO THIS ! :)
Object.prototype.load = function() {};
$(window).load(function() {
alert('load event'); // never fired
});
Ejemplo here.
Nunca se recomienda aumentar el objeto Object.prototype
de esa manera, porque esas propiedades serán heredadas por una gran cantidad de objetos, incluso por algunos objetos host, y como usted sabe, la principal preocupación es que se enumeren por la declaración for-in
.
En ECMAScript 5, ahora una forma más segura existe, porque ahora podemos declarar propiedades no enumerables, por ejemplo:
Object.defineProperty(Object.prototype, 'foo', { value: 'bar' });
En el descriptor de propiedad - { value: 'bar' }
- podemos especificar atributos de propiedad, en el caso de valor Propiedades como en el ejemplo anterior, podemos especificar el atributo writable
y el configurable
atributo común (determina si una propiedad puede ser re-configurado -attribute cambios-o eliminado.
y tenemos también el enumerable
atributo, que determina si la propiedad se enumerará en la declaración for-in
.
Si no se especifica los atributos, que son false
por defecto, el descriptor será parecida:
{
value: 'bar',
writable: false,
configurable: false,
enumerable: false
}
Hay una buena discusión sobre esto en [Object.prototype es erlaubt] (http: // www.thomasfrank.se/object_prototype_is_erlaubt.html) –