Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将方法作为回调传递的javascript问题

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

Stack Overflow用户
提问于 2013-07-11 20:02:57
回答 3查看 111关注 0票数 1

我试图从方法内部访问对象的成员变量,该方法作为回调传递,在filereader事件期间触发。

我把下面的代码拼凑在一起,试图传达我的观点。似乎'this‘成为文件读取器,而不是调用点的对象。有没有办法让finishLoading能够访问对象变量?

我希望确保回调是为对象量身定做的,否则我只会将它们定义为类外部的静态函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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');
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-11 20:05:13

您需要.bind函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.m_fileReader.addEventListener('loadend',
    this.callback_finishedLoading.bind(this),
    false);

.bind函数将接受传递的参数,并使用该参数作为其this来调用原始函数,而不是使用浏览器试图提供的任何值。

或者,只需为this创建自己的别名,并将调用封装在一个匿名函数中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var self = this;
this.m_fileReader.addEventListener('loadend', function(ev) { 
    self.callback_finishedLoading(ev)
}, false);

后者主要是.bind在幕后做的事情,但它的优点是它可以在ES5之前的浏览器上运行,而不需要填充程序。

票数 4
EN

Stack Overflow用户

发布于 2013-07-11 20:12:04

您可以让构造函数实现EventListener接口,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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方法。

最后,在构造函数中,我们根本不传递函数。相反,只需传递myClass实例this即可。

我删除了你的param1,因为不清楚它是如何使用的。如果它需要从其他调用接收一些值,那么您可以在.prototype上创建一个单独的finishedLoading方法,并让.loadend()方法调用它。

票数 1
EN

Stack Overflow用户

发布于 2013-07-11 20:06:47

this是相对于上下文的。每次打开新块{}时,它都会更改为当前块上下文。在调用回调函数之前,将this保存到另一个变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17602419

复制
相关文章
DWR中传递外部数据给回调方法
DWR中传递外部数据给回调方法(Passing extra data to callbacks)
源哥
2019/05/26
8790
JavaScript回调函数
JavaScript中的回调函数是一种特殊类型的函数,它被传递给其他函数作为参数,并在特定的事件或条件发生时被调用。回调函数用于处理异步操作、事件处理、定时器等情况,以确保代码在合适的时机执行。在JavaScript中,回调函数常用于处理非阻塞的操作,以避免程序的停顿和等待。
堕落飞鸟
2023/05/17
2.5K0
JavaScript 回调函数
函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中被创建,能从函数中返回;
鱼找水需要时间
2023/02/16
2.8K0
javaScript回调函数
回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。
用户6167509
2019/09/04
3.6K1
JavaScript回调函数
JavaScript API里这样解释:A callback is a function that is passed as an argument to another function and is executed after its parent function has completed. (回调是一个函数作为参数传递给另一个函数,其母函数完成后执行。) 使用回调函数的原因:可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。
奋飛
2019/08/15
2.3K0
scrapy回调函数传递参数
scrapy.Request 的callback传参的两种方式 1.使用 lambda方式传递参数 def parse(self, response): for sel in response.xpath('//li[@class="clearfix"]/div[@class="list_con"]'): item=DmozItem() item['href']=sel.xpath('h2/a/@href').extract()[0] yield sc
用户1558882
2018/04/03
1.2K0
JavaScript回调函数
JavaScript的回调函数大概是JavaScript中使用最广泛的函数编程技术了,我们几乎可以在任何脚本中看到它的身影。
wade
2020/04/23
1.6K0
javascript异步中的回调
我们之前介绍了javascript异步的相关内容,我们知道javascript以同步,单线程的方式执行主线程代码,将异步内容放入事件队列中,当主线程内容执行完毕就会立即循环事件队列,直到事件队列为空,当用产生用户交互事件(鼠标点击,点击键盘,滚动屏幕等待),会将事件插入事件队列中,然后继续执行。 处理异步逻辑最常用的方式是什么?没错这就是我们今天要说的---回调
陌上寒
2019/04/02
2.1K0
javascript异步中的回调
JavaScript-回调函数
In computer programming, a callback is a piece of executable code that is passed as an argument to other code, which is expected to call back (execute) the argument at some convenient time
小小工匠
2021/08/16
9380
Scrapy回调函数callback传递参数的方式
默认Scrapy callback只能接函数名,不能传参数,我如果想给callback传递多个参数呢?
py3study
2020/11/06
2.7K0
什么是回调地狱?如何解决回调地狱问题_地狱回调
这个问题呢,需要从Node.js的API说起,这里就会有人问了?博主你不是说回调地狱的问题吗,怎么说到API了,别急,看博主一步一步的解释给你听:
全栈程序员站长
2022/11/15
3.2K0
JavaScript中的回调函数(callback)
被作为实参传入另一函数,并在该外部函数内被调用,用以来完成某些任务的函数,称为回调函数。
刘亦枫
2020/03/19
7.1K0
如何通过JNI传递对象执行回调
JNI的全称是java native interface,用来调用某些特定于系统平台或者硬件的操作,但是它只能调用c/c++的代码,若是其它语言代码,只能通过c/c++进行二次调用。
全栈程序员站长
2021/05/08
2.5K0
asp.net回调javascript
using System; using System.Collections; using System.IO; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; namespace Platform {  /// <summary>  /// 可以处理客户端的jscript的回调  //
阿新
2018/04/09
7210
javascript基础之回调函数
回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称(函数表达式),就叫做匿名回调函数。
wfaceboss
2019/04/08
8630
如何深度理解JavaScript的回调函数
我们知道,JavaScript他不是一个面向对象语言,但是,我们的JavaScript是一个基于对象的脚本语言。
JanYork_简昀
2022/05/25
1.3K0
如何深度理解JavaScript的回调函数
JavaScript中的this指针与回调函数
在常规的面向对象语言中(比如C++),this指针的指向是确定的。但在JavaScript中,this指向依赖于运行环境。
coderhuo
2023/10/21
1940
QQ回调地址常见问题及修改方法
用户点击QQ登录跳转到QQ登录页面,登录成功后,应该跳转回网站。回调地址即在这里用来指定跳转回网站的URL。回调地址注册的目的是为了保障第三方APPID帐户的安全,以免被其他恶意网站盗用。需注意:1. 需要填写到站点接收qq登录信息的接口 例如:http://网站首页域名/api/oauth/QQ/callback.php ;2. 具体跳转URL将在程序中指定路径以及请求参数进行构造。
CiiLii西里网
2023/04/18
2.5K0
QQ回调地址常见问题及修改方法
JavaScript基础——回调(callback)是什么
上篇文章《JavaScript基础——你真的了解JavaScript吗?》,我们明白了JavaScript是一个单线程、非阻塞、异步、解释性语言,清楚了什么是单线程、进程、阻塞、调用堆栈、异步回调、任
前端达人
2018/12/02
1.6K0
JavaScript基础——回调(callback)是什么
JavaScript系列之回调函数callback
听起来似乎有点不好理解,所以还是举例进行说明,介绍回调函数之前先简单说明一下同步和异步,前端也有同步和异步。同步和异步总得来说,两者最明显的区别就是是否需要等待,如果是串行执行的就是同步机制,是并行执行的就是异步机制,这个比较好理解
SmileNicky
2020/01/13
8660

相似问题

将javascript回调作为java方法参数传递

110

将方法作为回调传递

30

JavaScript:将内置对象的方法作为回调函数传递

13

将嵌套回调作为参数javascript传递?

40

将typescript类方法作为回调传递

111
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文