js中的this

文章详细阐述了JavaScript中this的指向规则,包括在方法、函数、严格模式、事件处理以及箭头函数中的不同行为。在Vue.js的环境中,this在DOM事件监听器中会指向触发事件的元素,而在箭头函数中则继承自外层作用域。同时提到了call和apply方法用于改变函数的执行上下文。
摘要由CSDN通过智能技术生成

js中的this永远指向一个对象
这个指向会随着执行环境的变化而变化

  • 在方法中,this 表示该方法所属的对象。
  • 如果单独使用,this 表示全局对象。
  • 在函数中,this 表示全局对象。//函数中的函数也是一样,因为找不到从属对象,虽然函数也是对象,但是是比较特殊的对象,this不能指向函数对象,否者可以通过this给函数随意添加成员
  • 在函数中,在严格模式下,this 是未定义的(undefined)。
  • 立即执行函数this必定指向window
  • 在事件中,this 表示接收事件的元素。
  • 箭头函数中,this指向父级作用域指向的对象,注意对象中的箭头函数的父级作用域不是对象(对象不存在作用域),而是那个对象所属的作用域
  • 类似 call() 和 apply() 方法可以将 this 引用到任何对象。

总结来说,也就一句话,函数中的this都是在函数执行的时候才会有确切的值,这个值由调用函数的对象决定,如果往上层找到最后,那this指向的就是window对象,如果调用函数的是dom节点,那this指向的就是dom节点。call和apply是函数对象的两个成员函数,可以指定函数的执行环境,两个参数分别是调用函数的对象和函数的参数,区别在于参数的写法,apply传入一个参数数组,call则把参数按顺序传入

新增项目中遇到的问题

下面一段代码

<template>
    <div id="test">111
        <div class="test" v-if="state"></div>
    </div>
</template>
<script>
export default {
    name: 'FirstDay',
    data(){
        return {
            state:false
        }
    },
    mounted(){
        var dom = document.querySelector('#test')
        if(dom){
            let that = this
            console.log(this) //vue实例
            console.log('dom is exist')
            console.log(that) //vue实例
            dom.addEventListener('click', function (){
                console.log(111)
                console.log(this) //调用这个函数的时候,对象是dom节点,所以this指向dom节点 
            })
            
            dom.addEventListener('click',()=>{
            	cosole.log(222)
            	cosole.log(this)//对于箭头函数,其中的this指向其父级作用域所属的对象,自己的作用域是addEventListener,父级作用域是mounted函数,mounted函数所属对象是vue实例
            })
        }
    }
}

</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperHaker~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值