我的类分配希望我为我引用的脚本使用defer
标记,但由于我的js文件中的执行顺序,这导致图像的naturalWidth
未定义。
我的HTML在头部有这一行(赋值希望我把它放在<head>
中,但使用defer="defer"
)<script src="scripts/script.js" defer="defer"></script>
我的js:
var catImageWidth = document.getElementById("cat-image").naturalWidth;
var birdImage = document.getElementById("bird-image");
birdImage.width = catImageWidth;
所以我试了这个:
var catImage = document.getElementById("cat-image");
var birdImage = document.getElementById("bird-image");
var catImageWidth;
catImage.onload = function() {
catImageWidth = this.naturalWidth;
console.log(catImageWidth) //logs 600
}
birdImage.width = catImageWidth; //logs `undefined`
我认为birdImage.width
的赋值是未定义的,因为这行代码在catImage.onload
实际发生之前运行。这是否意味着我只能在catImage.onload
的function
范围内分配birdImage.width
?
我尝试了catImage.onload = () => { //block of code }
的ES6,但这似乎不起作用。
3条答案
按热度按时间t3irkdon1#
问题是你试图访问一个超出范围的变量。
请给予这个试试:
dgiusagp2#
这是否意味着我只能在
catImage.onload
函数的作用域内分配birdImage.width
?似乎是这样,这是最好的办法。
您可以使用箭头函数,但不能使用
this
关键字来引用图像。不工作:
因为在arrow函数中,
this
对象没有绑定到图像引用,它引用外部作用域的this
。有效:
或:
wtlkbnrh3#
这也可以使用JQuery(请注意,我先保存元素引用(我正在使用一个维护此元素的JS类),然后我需要正确地获取
onLoad
函数中包含naturalWidth
的对象:DOM构建后获取引用:
后者: