我想获取图像大小并将其放入对象中。这是我写的代码,它不能按我的意图工作。
var images = { a: { src: 'http://aaa/'}, b: {src: 'http://bbb/'}, … };
for (var i in images) {
var img = new Image();
img.onload = function() {
images[i].width = this.width;
images[i].height = this.height;
}
img.src = images[i].src;
}
答案 0 :(得分:1)
你的问题是调用回调时i
会发生变化:它的值将是循环结束的值。
解决方案是将images[i]
存储为立即调用的函数中的变量。将您的代码更改为
var images = { a: { src: 'http://aaa/'}, b: {src: 'http://bbb/'}, … };
for (var i in images) {
(function(o){
var img = new Image();
img.onload = function() {
o.width = this.width;
o.height = this.height;
};
img.src = o.src;
})(images[i]);
}
Demonstration(打开控制台查看images
)