我正在尝试从一个方法内部访问对象的成员变量,该方法作为回调传递,在 filereader 事件期间触发。
我整理了下面的代码只是为了尝试表达我的观点。看起来“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 之前的浏览器上工作。
关于将方法作为回调传递的 javascript 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17602419/