Ho il codice javascript di seguito. Su Chrome, Firefox, emulatore Android, Firefox su un Samsung Galaxy S (Gingerbread 2.3.3) e Safari su iPod funziona perfettamente. Non funziona nel browser nativo del Samsung Galaxy S.Creazione di un oggetto due volte produce risultati diversi
Il codice crea un oggetto e verifica i valori sull'oggetto. La prima volta che crea gli oggetti è corretto. La seconda volta che crea l'oggetto i valori non sono corretti.
Si tratta di un bug in Javascript o V8 o nel dispositivo? Come faresti a risolverlo?
var Padding = function(pleft, ptop, pright, pbottom) {
this.top = 20;
this.left = 1;
this.right = 0;
this.bottom = 0;
this.left = pleft;
this.top = ptop;
this.right = pright;
this.bottom = pbottom;
};
function testPadding() {
var p;
p = new Padding(91, 92, 93, 94);
alert(p.left.toString() + "," + p.top.toString() + "," + p.right.toString() + "," + p.bottom.toString());
}
testPadding(); // 91,92,93,94 - correct
testPadding(); // 1,20,93,0 - should be 91,92,93,94
testPadding(); // 1,20,93,0 - should be 91,92,93,94
MODIFICA: Ho trovato il motivo per cui funziona nell'emulatore. L'emulatore utilizza un motore javascript diverso. Usa JSC invece di V8. C'è uno snippet di codice in http://code.google.com/p/android/issues/detail?id=12987 che ti aiuta a capire quale motore utilizza. L'emulatore utilizza JSC, il Samsung Galaxy S utilizza V8.
È un bug nell'implementazione di ECMAScript, qualunque sia il suo nome. :-) – RobG
È sicuramente un bug, ma di chi? Samsung? V8? Invio un'email a Samsung ma chissà se lo inoltreranno alla persona giusta o semplicemente lo ignoreranno. –
Vorrei archiviarlo con Samsung. Cerca altri browser che utilizzano lo stesso motore di script e vedi se hanno lo stesso bug: se lo trovi, segnala un bug a chiunque sviluppi V8 (Google?). Se lo hanno risolto in una versione successiva, spetta a Samsung aggiornare il browser alla versione successiva. – RobG