将方法作为回调传递的javascript问题
javascript problems with passing methods as callbacks
我正试图从一个方法内部访问对象的成员变量,该方法作为回调传递,在文件读取器事件期间触发。
我把下面的代码拼凑在一起,只是为了传达我的观点。"this"似乎变成了文件读取器,而不是调用点上的对象。有没有办法让finishLoading能够访问对象变量?
我想确保回调是针对对象定制的,否则我只会将它们定义为类外的静态函数。
function myClass(newName)
{
this.name = newName;
this.m_fileReader = new FileReader();
this.finishedLoading =
function(param1)
{
alert(this.name);
};
this.m_fileReader.addEventListener('loadend',
this.callback_finishedLoading,
false);
}
var instance = new myClass('timmy');
var instance2 = new myClass('joe');
您需要.bind
函数:
this.m_fileReader.addEventListener('loadend',
this.callback_finishedLoading.bind(this),
false);
.bind
函数将接受传递的参数,并使用该参数调用原始函数作为其this
,而不是浏览器试图提供的任何值。
或者,只需为this
创建自己的别名,并将您的调用封装在一个匿名函数中:
var self = this;
this.m_fileReader.addEventListener('loadend', function(ev) {
self.callback_finishedLoading(ev)
}, false);
后者主要是.bind
在幕后所做的,但它的优点是它可以在ES5之前的浏览器上工作,而不需要填充程序。
您可以让构造函数实现EventListener接口,如下所示:
function myClass(newName) {
this.name = newName;
this.m_fileReader = new FileReader();
this.m_fileReader.addEventListener('loadend', this, false);
}
myClass.prototype.handleEvent = function(event) {
return this[event.type] && this[event.type](event)
}
myClass.prototype.loadend = function(event) {
alert(this.name);
};
var instance = new myClass('timmy');
var instance2 = new myClass('joe');
我将finishedLoading
重命名为loadend
,并将其放在构造函数的.prototype
上。然后,我在.prototype
中添加了一个.handleEvent
方法。
最后,在构造函数中,我们根本不传递函数。相反,只需传递this
,它就是您的myClass
实例。
我删除了你的param1
,因为不清楚该如何使用。如果它需要从其他调用中接收一些值,那么您可以在.prototype
上创建一个单独的finishedLoading
方法,并让.loadend()
方法调用它
this
是相对于上下文的。每次打开新块{}时,它都会更改为当前块上下文。在调用回调函数之前,将this
保存到另一个变量中。
相关文章:
- javascript问题正文样式
- 将代码放入click函数时出现javascript问题
- 奇怪的javascript问题
- 选中复选框的Jquery/Javascript问题使用输入框操作将行从一个表添加到另一个表
- 多上传的JavaScript问题
- 使用YouTube iFrame API的IE中的JavaScript问题
- 关于函数的Javascript问题 - IIFE
- Javascript问题与下拉菜单上的单击事件有关
- JavaScript 问题 - 意外的令牌 (.
- Chrome 中的 JavaScript 问题
- 在javascript问题中应用复合css规则
- Javascript问题,flexslider脚本未加载
- document.write和document.innerHTML以及其他javascript问题之间有什么区别
- jQuery到纯javaScript问题
- javascript问题后的onblur和onfocus
- 谷歌地图API和JavaScript问题:-(
- 第三方javascript问题
- javascript问题中的全局变量
- 嵌套if的javascript问题
- 绑定的Javascript问题