我正在创建一个基于CoffeeScript的应用程序,该应用程序使用Canvas元素叠加在Webcam视频上(这仅仅是为了提供上下文信息,似乎与我的问题无关)。为了获得正确的Canvas尺寸以覆盖视频,我将事件处理函数附加到loadedmetadata
事件上,代码如下:
WebcamWizard.prototype.initializeUserMedia = function(stream) {
// ...
video = document.getElementById('webcam');
video.addEventListener('loadedmetadata', function(e) {
// ...
v = e.srcElement;
// ...
});
// ...
}
这个方法运行良好。然而,在这种情况下,我更喜欢在这个特定类的另一个方法中定义这个处理程序方法,如下所示:
WebcamWizard.prototype.initializeUserMedia = function(stream) {
// ...
video = document.getElementById('webcam');
video.addEventListener('loadedmetadata', this.initializeCanvas);
// ...
}
WebcamWizard.prototype.initializeCanvas = function(e) {
// ...
video = e.srcElement;
// ...
}
我之所以更喜欢这种方式,是因为它可以使CoffeeScript代码更加整洁,并且可以更轻松地在我正在使用的类中访问canvas DOM对象。但是当我采用第二种方式时,
initializeCanvas
方法似乎没有被调用。控制台也没有报告任何错误。为什么会这样呢?奇怪的是,在同一文件中以这种方式调用方法似乎也可以正常工作。
WebcamWizard.initializeCanvas
иҖҢдёҚжҳҜthis.initializeCanvas
еҗ—пјҹ - jbabey