新Image()和document.createElement('img')`有区别吗?
在JavaScript中,我可以这样做:
img1 = new Image(); img2 = document.createElement('img');
我的问题是,这两种方法有什么区别? 我已经读过Image
, Form
和Element
被称为宿主对象 ,这是真的吗? 如果是,主机对象是什么?
哪种方法更可取?
我找不到任何详细的参考,但基于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 。
我已经读过
Image
,Form
和Element
被称为宿主对象 ,这是真的吗?
是。
如果是,主机对象是什么?
ECMAScript规范以这种方式激励主机对象:
ECMAScript是一种面向对象的编程语言,用于在主机环境中执行计算和操作计算对象。 这里定义的ECMAScript并不是计算自足的; 事实上,本规范中没有规定input外部数据或计算结果的输出。 相反,预计ECMAScript程序的计算环境将不仅提供本规范中描述的对象和其他设施,而且还提供某些特定于环境的主机对象,其描述和行为超出本规范的范围,除了表明他们可能会提供某些可以访问的属性,以及某些可以从ECMAScript程序调用的函数。
和
主机对象
对象提供的主机环境来完成ECMAScript的执行环境。
注意任何非本地对象都是一个主机对象。
因此,在规范中没有定义和由环境提供的任何对象都是主机对象 。 这些例如在浏览器(等等)中: window
, document
和console
。
这两行是相等的,都创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;