JavaScript this关键字

本文详细介绍了JavaScript中的`this`概念及其在不同情况下的指向,包括默认执行、事件处理和方法调用时的绑定。同时,阐述了改变`this`指向的三种方法:`call()`、`apply()`和`bind()`,并对比了它们之间的区别。文章还讨论了`this`的隐式丢失问题以及如何通过显式绑定来解决。最后,总结了这三个方法的不同点,强调了它们在实际使用中的重要性。

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

一、this概念

this一般存在于函数中,表示所在函数的执行对象。相当于一个指针,但只有在函数执行时才被指向具体的对象,如果函数没有执行,this将没有意义。

注:

  • 函数的默认执行(this的默认绑定),如果没有明确隶属对象的函数,this执行window
  • 当函数被当作事件处理函数执行时,this指向事件源
  • 当函数被赋值给某个对象的方法时,通过这个对象的方法执行函数叫隐式绑定,this为当前对象

二、改变this指向的方法

  • call()
    1. 功能:改变原函数的this指向,并立即执行这个新函数(新函数不被保存)
    2. 参数:多个|第一个:要改变this指向的原函数 /其他参数(可是多个)
    3. 返回值:原函数的返回值
    4. 不会改变原数据
	function fn(a,b,c,d){
        console.log(a)
        console.log(this);
        return "原函数的返回值"
    }
    fn(123);
    
	fn.call(123);
    fn.call("hello");
    fn.call(true);

    var res = fn.call("hello","world","asd","qwe","zxc")
    console.log(res);
  • apply
    1. 功能:改变原函数的this指向,并立即执行这个新函数(新函数不被保存)
    2. 参数:两个|第一个:要改变this指向的原函数 、第二个参数:必须是数组(覆盖原函数的arguments)
    3. 返回值:原函数的返回值
    4. 不会改变原数据
	function fn(a,b,c,d){
        console.log(a)
        console.log(this);
        return "原函数的返回值"
    }
    fn(123);
	var res = fn.apply("hello", [123,"asd"])
    console.log(res)
  • bind()
    1. 功能:改变原函数this指向,返回一个新函数,新函数被保存到bind的返回值
    2. 参数:多个|第一个:要改变this指向的原函数 、其他参数:覆盖原数据的参数
    3. 返回值:返回一个和原函数一样的被改变this指向的新函数
    4. 不会改变原数据
	function fn(a,b,c,d){
        console.log(a)
        console.log(this);
        return "原函数的返回值"
    }
    fn(123);
 	var res = fn.bind("hello",123,"qwe");
    console.log(fn);
    console.log(res);
    console.log(res === fn);     // f
    res();

三、隐式丢失

  • 通过函数的call和apply或bind方法,强行修改当前函数中的this指向,叫强制(显示)绑定,显示绑定可以用来解决隐式丢失。
  • 通过new关键字绑定,当一个函数被new执行时,函数内部的this会指向new出来的对象

四、三种方法的不同点

  • call和apply改变的新函数没有被保存,bind的新函数被保存到了bind的返回值。
  • call和bind可以在第二位后跟多个参数,apply只有两个参数,第二个参数只能为数组形式。
  • call和bind覆盖原函数的参数,apply覆盖原数据的arguments。
  • call和apply返回值为原函数的返回值,bind返回一个跟原函数一样的被改变this指向的新函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值