新Image()和document.createElement('img')`有区别吗?

在JavaScript中,我可以这样做:

img1 = new Image(); img2 = document.createElement('img'); 

我的问题是,这两种方法有什么区别? 我已经读过ImageFormElement被称为宿主对象 ,这是真的吗? 如果是,主机对象是什么?

哪种方法更可取?

我找不到任何详细的参考,但基于MDC- HTMLImageElement示例中的注释,看起来Image是DOM级别0的一部分,而document.createElement是DOM级别2的一部分 。

DOM级别0是Netscape发明的,提供了访问网站某些元素的方法。 基本上所有的浏览器都支持它来实现向后兼容。
但说实话,我不明白为什么在那里存在Image构造函数,因为据我了解,没有办法操纵 DOM级别为0的文档。也许只有在浏览器内部使用才能创build对象。

DOM级别2是由W3C开发的官方标准。

有关DOM级别的更多信息,请参见quirksmode.org – Level 0 DOM和Wikipedia 。


我已经读过ImageFormElement被称为宿主对象 ,这是真的吗?

是。

如果是,主机对象是什么?

ECMAScript规范以这种方式激励主机对象:

ECMAScript是一种面向对象的编程语言,用于在主机环境中执行计算和操作计算对象。 这里定义的ECMAScript并不是计算自足的; 事实上,本规范中没有规定input外部数据或计算结果的输出。 相反,预计ECMAScript程序的计算环境将不仅提供本规范中描述的对象和其他设施,而且还提供某些特定于环境的主机对象,其描述和行为超出本规范的范围,除了表明他们可能会提供某些可以访问的属性,以及某些可以从ECMAScript程序调用的函数。

主机对象
对象提供的主机环境来完成ECMAScript的执行环境。
注意任何非本地对象都是一个主机对象。

因此,在规范中没有定义和由环境提供的任何对象都是主机对象 。 这些例如在浏览器(等等)中: windowdocumentconsole

这两行是相等的,都创buildHTMLImageElement对象。 唯一的区别是在混合命名空间的XML文档中 – new Image()总是返回带有XHTML命名空间的<img>元素, document.createElement('img')并不总是这样做。

我个人会坚持createElement,因为然后它不是一个特殊的情况下,使图像一切都做成相同的方式,因为他们是相同的我也注意到,jquery使用appendChild(节点)方法的一切,我不知道区别这两个方法在你的问题,但jQuery的确可以跨浏览器工作

我不知道什么技术的区别应该是,但我只是固定在IE8的错误, new Image()更改为document.createElement('img')在下面的代码。 在IE8中,使用Image构造函数时,onloadcallback永远不会触发。

 newImage = document.createElement('img'); //newImage = new Image(); newImage.onload = function () { callback(this.width, this.height); }; newImage.src = image.src;