这是我的代码:
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.有什么方法可以解决这个问题吗?我喜欢这个解决当前问题的方法..
答案 0 :(得分:5)
Chrome已在图片元素上定义x
和y
。由于您尚未将该元素插入到页面中,因此x
和y
将为0
。
在Chrome控制台的至少有一张图片的页面上运行此内容...
$$("img")[0].hasOwnProperty("x");
您会看到HTMLImageElement
已经在其prototype
对象上直接拥有该属性,不是。
如果您在控制台中输入此内容,也可以直观地看到它......
dir($$("img")[0]);
...然后展开对象。
x
和y
属性不可更改无法更改,因此当您尝试修改它们时,它们会保留其值(就好像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控制台中测试。