Voglio verificare se un oggetto è vuoto: {}
. Quanto segue è in genere utilizzato:Come verificare se object "isEmpty()" se Object.prototype è stato modificato?
function isEmpty(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop))
return false;
}
return true;
}
Ma supponiamo che il prototipo Object
inserito il seguente:
Object.prototype.Foo = "bar";
Test:
alert(isEmpty({})); // true
Object.prototype.Foo = "bar";
alert({}.Foo); // "bar" oh no...
alert(isEmpty({})); // true ...**huh?!**
ho cercato di bombardare il prototipo dell'oggetto, cambiare è costruttore e tutti i tipi di tali hack. Niente ha funzionato, ma forse l'ho fatto male (probabile).
In realtà ho appena realizzato che questa domanda è probabilmente formulata in modo errato, dovrebbe essere: _ "come verificare se una catena di prototipi è stata modificata" _? –
... e l'unico modo in cui riesco a pensare è quello di codificare hardicamente ogni proprietà per "Oggetto", "Numero", "Array", ecc. E controllare che non ci sia nulla al di fuori delle proprietà conosciute. Abbastanza disordinato Anche se mi piacerebbe farlo in un test unitario per vedere che nessuno ha nascosto qualcosa nei tipi primitivi, di cui sono sempre stato sospettoso (perché potrebbe far saltare il mio codice a valle e farei fatica a rintracciare il problema) . –
leggi questo: http://www.3site.eu/doc/ – diEcho