this指向及强制性修改this指向的三种方法详解

本文详细解析JavaScript中this在不同场景下的行为,涵盖普通函数、对象方法、构造函数、定时器、事件绑定及箭头函数,并介绍call/apply/bind修改this指向的方法、格式和应用场景,特别关注在Vue中的使用和实例演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

this指向:    永远指向它的调用者;            官方说法:执行上下文(执行环境)

1、普通函数this指向--->Window

function fn1() {
    console.log(this);
}

fn1();

2、在对象中this指向--->当前对象

var obj = {
    a : 1,
    b : function () {
        console.log(this);
    }
}

obj.b();

3、在构造函数中this指向--->实例对象

function Person(name) {
    this.name = name;
    console.log(this);
}

var p1 = new Person('王憨憨');

4、在定时器中this指向--->Window

setInterval(() => {
    console.log(this);
}, 1000)

 5、在绑定事件中this指向--->当前事件对象

document.onclick = function () {
     console.log(this);
}

6、箭头函数不会改变this指向

在vue中我平常使用的时候;一般情况下都会  let vm = this

    methods: {

            add(){

                let vm = this;

            }

        }

但是在写代码的过程中,难免会遇到需要修改this指向的情况,这个时候就需要使用我们修改this指向的三种方法了。

  1. call
  2. apply
  3. bind
var obj = {
     a: 1,
     b: 2
}

function fn1(a, b) {
    console.log(this, a, b);
}

修改this指向三张方法的格式以及注意事项:

  1. call  apply:改变this的指向 ,call直接调用,而apply需要重新调用这个函数
  2. call传参数:call(this指向的,参数1,参数2...);
  3. apply传参数:apply(this指向的,[参数1,参数2...]);     --->apply传参数是一个数组
  4. bind传参数:bind

强制修改this指向的调用格式:

fn1.call(obj);

fn1.apply(obj);

fn1.bind(obj)();

强制修改this指向的传参语法:

fn1.call(obj, 1, 2);

fn1.apply(obj, [3, 4]);

fn1.bind(obj)(5, 6);    // bind传参在react框架用的比较多些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值