将方法作为回调传递的 javascript 问题

标签 javascript object methods callback

我正在尝试从一个方法内部访问对象的成员变量,该方法作为回调传递,在 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/

相关文章:

javascript - 将 admob 广告实现到 Cordova Javascript 应用程序中

javascript - 如何循环遍历 MarkLogic 中的 JSON 对象以推送数组中的所有键?

Python - 返回所有被方法修改的 self.* 变量

javascript - 将 marginLeft 动画化为元素的 -width

javascript - 在头部添加html

javascript - Bootstrap Carousel 自动功能在鼠标悬停在其上时不起作用?

java - 我应该将 null 设置为对象以从内存中删除吗?

javascript - [...new set(array)] 在 JavaScript 中如何工作?

java - 将实例传递给方法 Vs。转发参数

java - 如何编写带有参数的方法来实现 Java 中的接口(interface)