私は以下のjavascriptコードを持っています。 Chrome、Firefox、Androidエミュレータ、Samsung Galaxy S(Gingerbread 2.3.3)のFirefox、iPodのSafariではうまく動作します。 Samsung Galaxy Sのネイティブブラウザでは表示されません。オブジェクトを2回作成すると結果が異なります
コードはオブジェクトを作成し、そのオブジェクトの値をテストします。初めてオブジェクトを作成するときは、正しいものです。 2回目にオブジェクトを作成すると、値が正しくありません。
これはJavascriptまたはV8またはデバイスのバグですか?それを解決するにはどうしたらいいですか?
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
編集:私はそれがエミュレータで動作する理由を発見しました。エミュレータは異なるjavascriptエンジンを使用します。それはV8の代わりにJSCを使用します。 http://code.google.com/p/android/issues/detail?id=12987には、使用するエンジンを理解するのに役立つコードスニペットがあります。エミュレータはJSCを使用し、Samsung Galaxy SはV8を使用します。
ECMAScript実装のバグです。何とか呼ばれています。 :-) – RobG
間違いなくバグですが、誰ですか?サムスン? V8?私はサムスンに電子メールを送っていますが、それを適切な人に転送するのか、それとも無視するのかは分かりません。 –
私はSamsungにそれを提出します。同じスクリプトエンジンを使用している他のブラウザを探して、同じバグがあるかどうかを確認します。見つけたらV8(Google?)を開発した人にバグを報告します。彼らはそれ以降のバージョンでそれを修正した場合、それは最新のバージョンにブラウザを更新するサムスンまでです。 – RobG