vuethis指向问题_JS this指向!vue this 失效?

本文详细探讨了JavaScript中的this指向规则,包括全局环境、函数调用、对象方法、构造函数以及call和apply的影响。同时,特别讨论了在Vue框架中可能出现的this失效情况,特别是当函数作为DOM事件处理函数时,this如何指向触发事件的元素。
摘要由CSDN通过智能技术生成

this 指向

全局环境:

在全局环境下,this 始终指向全局对象(window), 无论是否严格模式;

函数直接调用:

普通函数内部的this分两种情况,严格模式和非严格模式。

(1),非严格模式下,this 默认指向全局对象window

(2),而严格模式下, this为undefined

对象中的this

对象内部方法的this指向调用这些方法的对象,

  1. 函数的定义位置不影响其this指向,this指向只和调用函数的对象有关(谁调用它,this指向谁)。
  2. 多层嵌套的对象,内部方法的this指向离被调用函数最近的对象(window也是对象,其内部对象调用方法的this指向内部对象, 而非window)。

构造函数中this

构造函数中的this与被创建的新对象绑定。

注意:当构造器返回的默认值是一个this引用的对象时,可以手动设置返回其他的对象,如果返回值不是一个对象,返回this。

call & apply

当函数通过Function对象的原型中继承的方法 call() 和 apply() 方法调用时, 其函数内部的this值可绑定到 call() & apply() 方法指定的第一个对象上, 如果第一个参数不是对象,JavaScript内部会尝试将其转换成对象然后指向它。

DOM 事件处理函数中的 this

(1)当函数被当做监听事件处理函数时, 其 this 指向触发该事件的元素 。

// 被调用时,将关联的元素变成蓝色 function bluify(e){ //在控制台打印出所点击元素 console.log(this); //阻止时间冒泡 e.stopPropagation(); //阻止元素的默认事件 e.preventDefault();  this.style.backgroundColor = '#A5D9F3'; } // 获取文档中的所有元素的列表 var elements = document.getElementsByTagName('*'); // 将bluify作为元素的点击监听函数,当元素被点击时,就会变成蓝色 for(var i=0 ; i
61675960b3b07f2b3ee8894a53f42ee3.png

setTimeout & setInterval

对于延时函数内部的回调函数的this指向全局对象window(当然我们可以通过bind方法改变其内部函数的this指向)

箭头函数中的 this

由于箭头函数不绑定this, 它会捕获其所在(即定义的位置)上下文的this值, 作为自己的this值。

vue 中 this 指向问题

我们再使用vue 开发中,经常会使用定时器, 或者操作dom , 进行事件操作等,在这里面,this指向都会指向window。关键它不会报错,只是会让你的 v-指令失效, vue this 中数据没有赋值成功。

eg :

2674008e2a855c9e71a6966ff75166d3.png

此时它们的 this 都没有指向 Vue 实例:

25e44b9a0d52e2dcf75cb81be9e3bdda.png

如果我们想让它们的 this 指向 vue 的实例:

使用箭头函数:

777659cfa0035ffecf0c0d91933d5ee3.png

结果:

ab182f221c9ab74ba52c084661ce2617.png

使用一个变量接收一个vue实例再操作:

f2e2c825af78f1df2a3a492d90e31c91.png

结果:

0baf46bc3107a53f4030e164026baa0c.png

通过 bind 改变 this 指向

eb02ebfe8a303742aa6beff9fb97a2fc.png
2d34aef9e4683e8d4d1b1075fffba7b4.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值