gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:51:25 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com