在Javascript中,设置图像src属性触发图像加载的机制是什么?

在Javascript中,设置图像src属性触发图像加载的机制是什么?,javascript,properties,Javascript,Properties,在使用Javascript操作DOM时,您很早就了解到以下模式: var img = new Image(); // Create new Image object img.onload = function(){ // execute drawImage statements here } img.src = 'myImage.png'; // Set source path 据我所知,通常在设置对象属性时没有副作用。那么触发图像加载的机制是什么呢?这只是魔术吗?或者我可以使用类似的

在使用Javascript操作DOM时,您很早就了解到以下模式:

var img = new Image();   // Create new Image object
img.onload = function(){
  // execute drawImage statements here
}
img.src = 'myImage.png'; // Set source path
据我所知,通常在设置对象属性时没有副作用。那么触发图像加载的机制是什么呢?这只是魔术吗?或者我可以使用类似的机制来实现支持并行模式的类Foo吗

var foo = new Foo();   // Create new object
foo.barchanged = function(){
  // execute something after side effect has completed
}
foo.bar = 'whatever'; // Assign something to 'bar' property

我隐约知道。Image.src就是这样触发加载的吗?

它类似于JavaScript setter,但在本机代码中实现。还有很多其他的,包括和


这解释了标准(ECMAScript 5)的getter和setter语法。不幸的是,它还没有完全实现。请注意,有大量的previor,其中大部分已被删除。它类似于JavaScript setter,但在本机代码中实现。还有很多其他的,包括和


这解释了标准(ECMAScript 5)的getter和setter语法。不幸的是,它还没有完全实现。请注意,有大量的先前版本,其中大部分已被删除。W3C生成了一个规范,描述浏览器(用户代理)在HTML、JavaScript和CSS中应遵循的行为。大多数浏览器供应商实现JavaScript语言,以便遵循此规范

上面描述的代码(其中定义了onload属性)是在与浏览器打包的本机JavaScript中实现的。每一个浏览器供应商都实现了一些可能在幕后运行略有不同的功能,但最终结果通常是相同的

对于Foo对象,您完全可以遵循相同的模式。但是,我知道的以本机方式执行此操作的唯一方法是将onchange事件绑定到DOM元素。图像上的src属性是DOM元素的属性


如果要利用onchange事件,您的Foo类还需要将值绑定到DOM元素。但是,当属性发生更改时,可能会有其他方式触发事件(而不是调用可以设置属性并调用其他功能的方法)。

W3C生成一个规范,描述浏览器(用户代理)在HTML、JavaScript和CSS中应遵循的行为。大多数浏览器供应商实现JavaScript语言,以便遵循此规范

上面描述的代码(其中定义了onload属性)是在与浏览器打包的本机JavaScript中实现的。每一个浏览器供应商都实现了一些可能在幕后运行略有不同的功能,但最终结果通常是相同的

对于Foo对象,您完全可以遵循相同的模式。但是,我知道的以本机方式执行此操作的唯一方法是将onchange事件绑定到DOM元素。图像上的src属性是DOM元素的属性


如果要利用onchange事件,您的Foo类还需要将值绑定到DOM元素。但是,当属性发生更改时,可能会有其他方式触发事件(而不是调用可以设置属性并调用其他功能的方法)。

触发加载的
Image.src=…
机制当前未指定,但完成后将更改该机制。(这是现在讨论这个问题的部分;它可能会出现在最终推荐中,但我尽量不去预测这些事情的未来——太容易在匆忙中预测而在闲暇时后悔。)一些浏览器基本上使用了您注意到的getter和setter实现了这一点(仅使用“native”在浏览器中实现的支持它们的函数,类似于如何,比如说,
document.appendChild
是一个JS函数,后面有一个“本机”浏览器提供的实现)。其他人对DOM getter和setter的方法与用户定义的getter和setter完全不同。(这就是为什么在Firefox4 Beta中不能使用
Object.getOwnPropertyDescriptor
来检查DOM getter和setter。这是我们最终会解决的问题,但我想我们已经没有时间在Firefox4上这么做了。)


目前的答案是:“如何”尚未确定,但很快就会确定。

触发加载的机制目前尚未确定,
Image.src=…
,但完成后会改变。(这是现在讨论这个问题的部分;它可能会出现在最终推荐中,但我尽量不去预测这些事情的未来——太容易在匆忙中预测而在闲暇时后悔。)一些浏览器基本上使用了您注意到的getter和setter实现了这一点(仅使用“native”在浏览器中实现的支持它们的函数,类似于如何,比如说,
document.appendChild
是一个JS函数,后面有一个“本机”浏览器提供的实现)。其他人对DOM getter和setter的方法与用户定义的getter和setter完全不同。(这就是为什么在Firefox4 Beta中不能使用
Object.getOwnPropertyDescriptor
来检查DOM getter和setter。这是我们最终会解决的问题,但我想我们已经没有时间在Firefox4上这么做了。)


现在的答案是:“如何”还没有确定,但很快就会确定。

为了完整性,你能提到WebIDL的哪一部分与此相关吗?为了完整性,你能提到WebIDL的哪一部分与此相关吗?