Chrome不支持Javascript中的原型属性吗?

时间:2012-07-02 01:46:45

标签: javascript cross-browser

这是我的代码:

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

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

在Firefox中如果我blankImage.x它会返回16,但在Chrome中它会返回0.有什么方法可以解决这个问题吗?我喜欢这个解决当前问题的方法..

3 个答案:

答案 0 :(得分:5)

Chrome已在图片元素上定义xy。由于您尚未将该元素插入到页面中,因此xy将为0

在Chrome控制台的至少有一张图片的页面上运行此内容...

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

您会看到HTMLImageElement已经在其prototype对象上直接拥有该属性,不是

如果您在控制台中输入此内容,也可以直观地看到它......

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

...然后展开对象。

xy属性不可更改无法更改,因此当您尝试修改它们时,它们会保留其值(就好像writable false HTMLImageElement一样)。

如果您对{{1}}上尚不存在的属性执行相同操作,则可以按预期工作。

答案 1 :(得分:1)

请注意,DOM Image对象不是任何标准的一部分(它可能隐藏在某个地方的HTML5中,但我找不到它),它是一个DOM 0功能,在标准化时代就存在于浏览器中并且一直存在从那时起兼容性。

浏览器不需要实现任何类型的继承方案,因此期望它们实现原型继承是不合理的。此外,许多浏览器在所有或任何DOM对象上实现原型继承。因此,不要指望DOM Image对象具有 prototype 属性,或者对于要由Image实例继承的原型对象上设置的属性。

文档: MDN:https://developer.mozilla.org/en/DOM/Image MSDN图像对象:http://msdn.microsoft.com/en-us/library/dd757809(v=vs.85).aspx#methods

答案 2 :(得分:0)

不完全确定发生了什么,但我发现它取决于您设置的属性的名称,例如:

Image.prototype.hello = "hello";

var a = new Image();

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

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

在Chrome控制台中测试。