首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript将图像存储在数组中的对象中,但是在记录对象时,console.log()中有吗?

Javascript将图像存储在数组中的对象中,但是在记录对象时,console.log()中有吗?
EN

Stack Overflow用户
提问于 2013-04-13 22:46:54
回答 1查看 854关注 0票数 1

我有一个我无法理解的问题。

我有一个对象数组,数组中每个对象的属性是id、source和cache。id是标识符,源是文件的源,缓存是实际的文件。

当我控制台记录整个数组时,我得到以下输出;

代码语言:javascript
运行
复制
console.log(array);

[Object]
    0: Object
        cache: img
        id: "strawberry"
        source: "http://127.0.0.1/images/strawberry.png"

它清楚地显示数组有一个0的索引,它是一个对象。该对象具有缓存属性,它是图像对象,id是草莓和源,是图像的源。

我的问题是试图检索缓存图像对象。经过测试,我发现如果我控制台日志的实际索引为0,而不是我得到的整个数组;

代码语言:javascript
运行
复制
console.log(array[0]);

Object {id: "strawberry", source: "http://127.0.0.1/images/strawberry.png"} 

你能看到缓存消失了吗?我不明白吗?

如果有关系,我正在使用严格的编码。

有人能解释一下为什么会发生这种事吗?

设置缓存(如so )

代码语言:javascript
运行
复制
var Assets = function (assets) {

     this.assets = assets;
};

Assets.prototype.load = function () {

    // For each asset
    this.assets.forEach(function (asset, index) {
        // Create new image object
        var img = new Image();
        // Image load handler
        img.addEventListener("load", function () {
            // Add image to assets
            this.assets[index].cache = img;
        }.bind(this), false);
        // Set the image source
        img.src = this.assets[index].source;
    }, this);
};

var assets = new Assets([{id: "strawberry", source: "http://127.0.0.1/images/strawberry.png"}]);

assets.load();

console.log(assets.assets); // shows cache image obj

console.log(assets.assets[0]); // show no cache
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-13 23:58:32

嗯..。,因为它还没有,

如果你做了这样的事情:

代码语言:javascript
运行
复制
setTimeout(function() {
    console.log(assets.assets[0]); // show cache
}, 1000); // adjust accordingly

然后你会看到cache。;)

在加载映像之前不会执行行this.assets[index].cache = img;,并且由于JavaScript的异步性质,您的console.log可能会更早地执行,从而给出未定义的结果。

我很确定你有:

代码语言:javascript
运行
复制
[Object]
    0: Object
        cache: img
        id: "strawberry"
        source: "http://127.0.0.1/images/strawberry.png"

单击控制台中的某个展开按钮(>)后。在执行此操作之前,图像实际上已经完成加载,因此您可以看到cache

然而,对于assets.assets[0],在加载图像之前记录了整个Object {id: "strawberry", source: "http://127.0.0.1/images/strawberry.png"},因此您没有看到cache

所以我相信实际发生的事情是:

  1. console.log(assets.assets)打印出了> [Object],实际上cache还没有出现,但是您没有注意到这一点,因为它是隐藏/折叠的。
  2. console.log(assets.assets[0])打印出了Object {id: "strawberry", source: "http://127.0.0.1/images/strawberry.png"}cache也不在那里。
  3. 图像被加载并附加到cache上。
  4. 您点击了'>',展开了由console.log(assets.assets)打印出来的cache,并在那里看到了cache,因为它现在已经在那里了.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15993774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档