Quiero comprobar si un objeto está vacío: {}
. A continuación se suele utilizar:Cómo probar si el objeto "isEmpty()" si Object.prototype se modificó?
function isEmpty(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop))
return false;
}
return true;
}
Pero supongamos que el prototipo Object
ha sido añadido a las siguientes:
Object.prototype.Foo = "bar";
Pruebas:
alert(isEmpty({})); // true
Object.prototype.Foo = "bar";
alert({}.Foo); // "bar" oh no...
alert(isEmpty({})); // true ...**huh?!**
he tratado de bombardear prototipo del objeto, cambie su constructor, y todo tipo de tales hacks. Nada funcionó, pero tal vez lo hice mal (probable).
En realidad, me acabo de dar cuenta de que esta pregunta probablemente está formulada incorrectamente, tal vez debería ser: _ "cómo probar si se cambió una cadena de prototipos" _? –
... y la única forma en que se me ocurre es codificar todas las propiedades para "Objeto", "Número", "Matriz", etc., y verificar que no haya nada fuera de las propiedades conocidas. Muy desordenado. Aunque me gustaría hacer esto en una prueba unitaria para ver que nadie haya colado algo en los tipos primitivos, algo de lo que siempre he sospechado (porque podría explotar mi código río abajo y me resultaría difícil localizar el problema) . –
lea esto: http://www.3site.eu/doc/ – diEcho