2

これが私のコードです:

Image.prototype.x = 0;
Image.prototype.y = 0;

var blankImage = new Image();
blankImage.src = "blank.png";
blankImage.x = 16;
blankImage.y = 16;

Firefox ではblankImage.x16 が返されますが、Chrome では 0 が返されます。これを回避する方法はありますか? 私は現在の問題に対するこの解決策が好きです..

4

3 に答える 3

5

Chrome では、イメージ要素のxとが既に定義されています。y要素をページに挿入していないため、xyになります0

少なくとも 1 つの画像を含むページの Chrome のコンソールでこれを実行します...

$$("img")[0].hasOwnProperty("x");

オブジェクトではなく、すでにそのHTMLImageElementプロパティを直接持っていることがわかります。prototype

コンソールにこれを入力すると、視覚的にも確認できます...

dir($$("img")[0]);

...そして、オブジェクトを展開します。

およびプロパティは不変でxありy、変更できないため、変更しようとしても値が保持されます (あたかも がwritableであるかのようにfalse)。

にまだ存在しないプロパティで同じことを行うと、HTMLImageElement期待どおりに機能します。

于 2012-07-02T01:58:47.813 に答える
1

DOM Image オブジェクトは標準の一部ではないことに注意してください (HTML5 のどこかに埋もれている可能性がありますが、私はそれを見つけることができません)。これは、標準化の頃にブラウザーに存在し、それ以来互換性のために存続している DOM 0 機能です。 .

ブラウザーは、いかなる種類の継承スキームも実装する必要がないため、プロトタイプの継承を実装することを期待するのは合理的ではありません。さらに、多くのブラウザーは、DOM オブジェクトのすべてまたは一部にプロトタイプの継承を実装していません。そのため、DOM Image オブジェクトにプロトタイププロパティがあることや、プロトタイプ オブジェクトに設定されたプロパティが Image インスタンスに継承されることを期待しないでください。

ドキュメント: MDN: https://developer.mozilla.org/en/DOM/Image MSDN Image オブジェクト: http://msdn.microsoft.com/en-us/library/dd757809(v=vs.85).aspx#メソッド

于 2012-07-02T02:37:35.687 に答える
0

何が起こっているのか正確にはわかりませんが、設定しているプロパティの名前に依存することがわかりました。

Image.prototype.hello = "hello";

var a = new Image();

a.hello; // Value is "hello";

a.hello = "goodbye";
a.hello; // Now it is "goodbye"

Chrome のコンソールでテストされています。

于 2012-07-02T02:00:45.427 に答える