没有实例化的Javascript Image对象

时间:2010-02-18 12:34:36

标签: javascript

这个问题是关于javascript性能的。考虑3个例子来说明:

function loadImgA() {
    new Image().src="http://example.com/image.gif"
}

function loadImgA1() {
    Image().src="http://example.com/image.gif"
}

function loadImgB() {
    var testImg = new Image();
    testImg.src="http://example.com/image.gif"
}

现在重点是我真的不需要在创建后操纵图像对象,因此loadImgA()。问题是,如果没有为新的Image()构造函数的返回值赋值,会发​​生什么 - 在这种情况下,我实际上可以跳过loadImgA1()中的'new'关键字?那么对象是否存在于函数之外或以某种方式影响内存使用?其他影响,差异?我不认为,因为实际上没有创建真实的实例?

为了正确看待这一点,我只需要获取图像的http请求。没有预加载或其他高级图像处理。上面的首选方法是什么?

1 个答案:

答案 0 :(得分:1)

使用Image()而不使用new关键字会引发错误。在您的示例中,loadImgA()loadImgB()将具有相同的最终结果,因为函数不会返回任何内容,也不会创建任何闭包来使用testImg变量。

关于内存使用情况,new Image()document.createElement("img")的别名。当在函数范围内创建DOM元素而不将其添加到文档中时,当所有闭包完成时,该元素应标记为垃圾收集并从内存中删除。实际创建实例,只是没有添加到DOM中,因此在不再使用时会被销毁。

我能看到的唯一真正的问题是,当图像对象被销毁时,它们上的任何当前http请求都可能被破坏。如果是这种情况,您可能需要使用onloadonerror事件处理程序在加载图像后或出现问题时进行清理。