首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

this.getView()在事件回调后返回undefined

this.getView()在事件回调后返回undefined是因为事件回调函数中的上下文(this)发生了变化,导致无法访问到正确的视图对象。

要解决这个问题,可以采取以下几种方法:

  1. 使用箭头函数:箭头函数不会改变上下文,可以保持this指向正确的对象。例如:
代码语言:javascript
复制
const callback = () => {
  const view = this.getView();
  // 其他操作
};
  1. 使用bind()方法绑定上下文:通过bind()方法将事件回调函数绑定到正确的上下文对象上。例如:
代码语言:javascript
复制
const callback = function() {
  const view = this.getView();
  // 其他操作
}.bind(this);
  1. 在事件回调函数外部保存正确的上下文:在事件回调函数外部将正确的上下文保存到变量中,然后在回调函数中使用该变量。例如:
代码语言:javascript
复制
const self = this;
const callback = function() {
  const view = self.getView();
  // 其他操作
};

以上方法可以确保在事件回调函数中正确地访问到this.getView()方法返回的视图对象。

关于云计算领域的相关知识,腾讯云提供了一系列的产品和服务,包括云服务器、云数据库、云存储、人工智能等。您可以访问腾讯云官方网站(https://cloud.tencent.com/)了解更多信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

React useEffect中使用事件监听函数中state不更新的问题

很多React开发者都遇到过useEffect中使用事件监听函数中获取到旧的state值的问题,也都知道如何去解决。...addEventListenerShowCount // 点击addEventListenerShowCount的按钮 eventListener事件函数打印state值add // 点击add.../ 点击showCount按钮 打印state值addEventListenerShowCount // 再次点击addEventListenerShowCount的按钮 eventListener事件函数打印...state值控制台打印结果如下图片手动实现的简易useEffect中,事件监听函数中也会有获取不到state最新值的问题下面根据上面React代码模拟为常规的js代码let obj; // 模拟btn...React函数中也是一样的情况,某一个对象的监听事件函数,这个对象相当于全局作用域变量(或者与函数同一层作用域链),函数中获取到的state值,为第一次运行时的内存中的state值。

10.5K60

Lodash 防抖和节流是如何实现的

startTimer 这个就是开启定时器了,防抖和节流的核心还是使用定时器,当事件触发时,设置一个指定超时时间的定时器,并传入函数,此时的函数 pendingFunc 其实就是 timerExpired...pendingFunc 其实就是定时器函数 timerExpired,表示定时结束的操作。...// 定时器函数,表示定时结束的操作 function timerExpired() { const time = Date.now() // 1、是否需要执行 // 执行事件结束的那次回...// 执行连续事件结束的那次回 function trailingEdge(time) { // 清空定时器 timerId = undefined // trailing 和 lastArgs...lastCallTime === undefined 第一次调用时 timeSinceLastCall >= wait 超过超时时间 wait,处理事件结束的那次回 timeSinceLastCall

1.8K40

webpack核心模块tapable用法解析

Loop:Loop就是循环的意思,实现的效果是,当一个hook注册了方法,如果这个方法返回了true就重复循环这个,只有当这个返回undefined才执行下一个。...SyncWaterfallHook SyncWaterfallHook也是SyncHook的基础上加了点流程控制,前面说了,Waterfall实现的效果是将上一个返回值作为参数传给下一个。...所以通过call传入的参数只会传递给第一个函数,后面的接受都是上一个返回值,最后一个返回值会作为call的返回返回给最外层: const { SyncWaterfallHook }...但是由于Parallel任务都是同时开始的,阻断是阻断不了了,实际效果是如果有一个任务返回了不为undefined的值,最终的会立即执行,并且获取Bail任务的返回值。...的基础上加上了Bail的逻辑,也就是中间任何一个任务返回不为undefined的值,终止执行,直接执行最后的,并且将这个返回值传给最终的: const { AsyncSeriesBailHook

51720

学会JavaScript手写代码秘籍14道常用api

wait 毫秒执行fn, 如果在wait期间再次触发事件,则重新计时 fn 事件触发函数 wait 延迟时间,wait 毫秒执行fn 返回经过包装事件处理函数 定时器,这里用到了闭包...,这样上一次事件触发就不会被执行 定时器也会重新设置 通过定时器来实现事件触发 wait 毫秒执行事件处理函数 需要给绑定上下文this,即触发事件的目标对象 // 防抖// 原理:事件被触发...wait 毫秒执行fn, 如果在wait期间再次触发事件,则重新计时// fn 事件触发函数// wait 延迟时间,wait 毫秒执行fn// 返回经过包装事件处理函数function...,这样上一次事件触发就不会被执行 // 定时器也会重新设置 if (timer) { clearTimeout(timer) } // 通过定时器来实现事件触发 wait...executor 同步执行 promise 状态不可逆 then 必须在 promise 状态改变执行 promise 链式调用,一个的参数是前一个返回值 实例化 Promise 时

29240

【Webpack】1256- 硬核解析 Webpack 事件流核心!

表示如果存在某个订阅事件返回了非 undefined 的值,则全部订阅事件从头执行: const hook = new SyncLoopHook([]); let count = 1; hook.tap...另外需要留意下,AsyncSeriesHook 钩子使用新的 hook.callAsync 来执行订阅(而不再是 hook.call),且支持传入(最后一个参数),全部订阅事件执行完毕触发。...如果一个异步的订阅返回undefined 的值,但在它返回前,其它并行执行的订阅会照常执行不受影响。...// “事件终止”打印的内容 [Shanghai] Arrived [Tokyo] Arrived 可以看到“事件终止”会在 Fly to Beijing 订阅结束触发,因为该订阅返回了...来检查事件是否应该结束 —— 若发现某个订阅执行出错,或者返回了非 undefined 值,_checkDone 方法会返回 true 并执行用户传入的“事件终止”)。

1.6K30

Webpack 插件架构深度讲解

bail 类型:逐次调用回,若有任何一个返回undefined 值,则终止后续调用 loop 类型:逐次、循环调用,直到所有函数都返回 undefined 第二个维度,按执行的并行方式...钩子先执行 fn1 ,如果此时 fn1 返回了非 undefined 值,则继续执行 fn1 直到返回 undefined 才向前推进执行 fn2 。...A,直到满足判定条件 times >= 4 ,A 返回 undefined ,才开始执行B。...:异步 + 并行 + 熔断,启动同时执行所有,但任意返回值时,忽略剩余未执行完的,直接返回该结果 AsyncSeriesBailHook :异步 + 串行 + 熔断,启动按序逐个执行...,过程中若有任意返回undefined 值,则停止后续调用,直接返回该结果 AsyncSeriesLoopHook: 异步 + 串行 + 循环,启动按序逐个执行,若有任意返回undefined

1.6K20

tapable(webpack核心模块)使用手册

Loop:Loop就是循环的意思,实现的效果是,当一个hook注册了方法,如果这个方法返回了true就重复循环这个,只有当这个返回undefined才执行下一个。...SyncWaterfallHook SyncWaterfallHook也是SyncHook的基础上加了点流程控制,前面说了,Waterfall实现的效果是将上一个返回值作为参数传给下一个。...所以通过call传入的参数只会传递给第一个函数,后面的接受都是上一个返回值,最后一个返回值会作为call的返回返回给最外层: const { SyncWaterfallHook }...但是由于Parallel任务都是同时开始的,阻断是阻断不了了,实际效果是如果有一个任务返回了不为undefined的值,最终的会立即执行,并且获取Bail任务的返回值。...undefined的值,终止执行,直接执行最后的,并且将这个返回值传给最终的: const { AsyncSeriesBailHook } = require("tapable"); const

65210

7 个角度吃透 Lodash 防抖节流原理

// 定时器函数,表示定时结束的操作 function timerExpired() { const time = Date.now() // 1、是否需要执行 // 执行事件结束的那次回...// 执行连续事件结束的那次回 function trailingEdge(time) { // 清空定时器 timerId = undefined // trailing 和 lastArgs...和设置 {trailing: true} 效果是一样的,事件结束都会再执行一次传入函数 fn,但是如果设置了{trailing: false},那么事件结束是不会再执行 fn 的。...这里开启一个定时器的目的是为了事件结束的那次回,即如果设置了 {trailing: true} 那么最后一次将执行传入函数 fn,哪怕 debounced 函数只触发一次。...4、到现在为止,fn 一次还没有执行,200 毫秒,定时器函数触发,执行 timerExpired 函数// 定时器函数,表示定时结束的操作 function timerExpired()

1.5K20

7.1 Windows驱动开发:内核监控进程与线程

,此类函数的原理是创建一个事件,当有进程或线程被创建或者注销时,系统会通过机制将该进程相关信息优先返回给我们自己的函数待处理结束再转向系统层。...PsSetCreateProcessNotifyRoutineEx和PsSetCreateThreadNotifyRoutine是Windows操作系统提供的两个内核函数,它们允许开发者进程或线程发生创建事件时拦截并处理这些事件...PsSetCreateProcessNotifyRoutineEx用于监控进程的创建事件,当有新的进程被创建时,操作系统会调用注册的函数。...而PsSetCreateThreadNotifyRoutine用于监控线程的创建事件,当有新的线程被创建时,操作系统会调用注册的函数。...; return STATUS_SUCCESS; } 编译并运行这个驱动程序,我们可以ARK工具中看到这个驱动所加载的CreateProcess的事件

35010

彻底搞懂nodejs事件循环_2023-03-15

nodejs是单线程执行的,同时它又是基于事件驱动的非阻塞IO编程模型。这就使得我们不用等待异步操作结果返回,就可以继续往下执行代码。当异步事件触发之后,就会通知主线程,主线程执行相应事件。...2、线程池中有可用线程时,从队列中取出这个任务执行,执行完毕,线程归还到线程池,等待下个任务。同时以事件的方式通知event-loop,event-loop接收到事件执行该事件注册的函数。...8、开始执行js文件,同步代码执行完毕,进入事件循环。9、没有任何可监听的事件时,销毁 nodejs 实例,程序执行完毕。以上就是 nodejs 执行一个js文件的全过程。...}}参考 前端进阶面试题详细解答uv__io_poll阶段源码最长,逻辑最为复杂,可以做个概括,如下:当js层代码注册的事件都没有返回的时候,事件循环会阻塞在poll阶段。...undefined2、其次呢,poll阶段,timeout时间未到的时候,如果有事件返回,就执行该事件注册的函数。timeout超时时间到了,则退出poll阶段,执行下一个阶段。

97030

彻底搞懂nodejs事件循环

nodejs是单线程执行的,同时它又是基于事件驱动的非阻塞IO编程模型。这就使得我们不用等待异步操作结果返回,就可以继续往下执行代码。当异步事件触发之后,就会通知主线程,主线程执行相应事件。...2、线程池中有可用线程时,从队列中取出这个任务执行,执行完毕,线程归还到线程池,等待下个任务。同时以事件的方式通知event-loop,event-loop接收到事件执行该事件注册的函数。...8、开始执行js文件,同步代码执行完毕,进入事件循环。9、没有任何可监听的事件时,销毁 nodejs 实例,程序执行完毕。以上就是 nodejs 执行一个js文件的全过程。...}}uv__io_poll阶段源码最长,逻辑最为复杂,可以做个概括,如下:当js层代码注册的事件都没有返回的时候,事件循环会阻塞在poll阶段。看到这里,你可能会想了,会永远阻塞在此处吗?...undefined2、其次呢,poll阶段,timeout时间未到的时候,如果有事件返回,就执行该事件注册的函数。timeout超时时间到了,则退出poll阶段,执行下一个阶段。

1.1K20

「硬核JS」图解Promise迷惑行为|运行机制补充

JavaScript 中有同步/异步任务的概念,同步任务主线程上执行,会形成一个 执行栈,主线程之外,事件触发线程管理着一个 任务队列,只要异步任务有了运行结果,就在 任务队列 之中放一个事件。...接着,执行队列中的第一个 then ,输出 20,返回undefined,内部执行 resolve(undefined) 返回的实例状态改为成功态 Fulfilled,并执行实例上的缓存方法,所以第二个...接着,执行队列中的第二个 then ,输出 30,返回undefined,内部执行 resolve(undefined) 返回的实例状态改为成功态 Fulfilled,并执行实例上的缓存方法,所以第三个...接着,执行队列中的第一个 then ,输出 20,返回undefined,内部执行 resolve(undefined) 返回的实例状态改为成功态 Fulfilled,并执行实例上的缓存方法,所以第二个...接着,执行队列中的第二个 then ,输出 30,返回undefined,内部执行 resolve(undefined) 返回的实例状态改为成功态 Fulfilled,并执行实例上的缓存方法,所以第三个

2.2K30

面试官:Vue中的$nextTick怎么理解?

一、NextTick是什么 官方对其的定义 在下次 DOM 更新循环结束之后执行延迟修改数据之后立即使用这个方法,获取更新的 DOM 什么意思呢?...DOM结构,可以使用Vue.nextTick() 第一个参数为:函数(可以获取最近的DOM结构) 第二个参数为:执行函数上下文 // 修改数据 vm.message = '修改的值' // DOM...$el.textContent) // 修改的值 }) 组件内使用 vm.nextTick() 实例方法只需要通过this.nextTick(),并且函数中的 this 将自动绑定到当前的 Vue...$el.textContent) // => '修改的值' 三、实现原理 源码位置:/src/core/util/next-tick.js callbacks也就是异步操作队列 callbacks新增函数后又执行了...callbacks等待执行 将执行函数放到微任务或者宏任务中 事件循环到了微任务或者宏任务,执行函数依次执行callbacks中的 参考文献 https://juejin.cn/post/6844904147804749832

1.4K11

每天20个灵魂拷问系列二

因为给div元素绑定事件此时this指向了div 而div里面是没有data属性的 //打印this返回 dom ......}) Promise.resolve().then(()=>{ console.log(3) }) console.log(4) 运行结果为 4231 这里主要考察了宏队列与微队列 dome 事件...、ajax、定时器属于宏队列 promise mutation属于微队列 先执行同步代码执行异步代码,而异步代码分为宏队列与微队列 先执行微队列执行宏队列 **第二题 ** setTimeout...这个promise会立即成功,成功的结果为undefined,当它执行成功(promise被改变了状态)他后面的then的就会被放到微队列里面 此时 宏:[1] 微:[3] 接下来程序继续往下执行...4、1 4是3所执行完毕才被放入微队列执行 二十五、attribute与property的区别与同步关系 解答 attribute:html标签的预定义和自定义属性 property:js原生对象的直接属性

22020

通过nodejs源码理解http pipeline的实现

http2.0中,每个请求会分配一个id,响应中也会返回对应的id,这样就算乱序返回,http客户端也可以知道响应所对应的请求。...http1.1这种情况下,http服务器的实现就会变得复杂,服务器可以以串行的方式处理请求,当前面请求的响应返回到客户端,再继续处理下一个请求,这种实现方式是相对简单的,但是很明显,这种方式相对来说还是比较低效的...state.onEnd); // 解析完http请求头时的 parser.onIncoming = parserOnIncoming.bind(undefined, server, socket...parser.onIncoming = null; // 解析http头时的http头个数达到阈值时,可能会多次 parser[kOnHeaders] = parserOnHeaders...; return parser; }); 从上面的代码中我们可以知道,nodejstcp连接上接收到数据,会交给http解析器处理,http是一个非常复杂的状态机,解析数据的时候会nodejs

1K20
领券