js中函数的apply和call还有bind方法

本文详细介绍了JavaScript中apply、call及bind方法的使用方式及其区别。通过具体实例展示了如何利用这些方法来控制函数内部this的指向,帮助开发者更好地理解和运用。

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

apply和call

apply和call这两个方法的作用一样,都是控制函数调用上下文即函数体内this值的能力,也就是切换所调用的函数的上下文。
代码如下:

		window.color = "red";
        document.color = "yellow";
        let obj = {
            color: "blue"
        }
        function returnColor(){
            console.log(this.color);
        }

情况1:apply没有传递值的时候,this默认指向window,因为returnColor调用的上下文是全局==window。(严格模式下,调用函数时如果没有指定上下文对象,则this值是不会指向window。所以,必须在apply()指定给一个对象

		returnColor.apply();

所以我们可以看到控制台打印出来的是red。
在这里插入图片描述
情况2:apply传入document,那么this就指向了document。

		returnColor.apply(document);

所以我们可以看到控制台打印出来的是yellow。
在这里插入图片描述
情况3:apply传入了obj这个对象,那么this就指向了obj。

		returnColor.apply(obj);

所以我们可以看到控制台打印出来的是blue。
在这里插入图片描述
apply和call的作用一样,只是传参的形式不同:
call传给被调用函数的参数必须是逐个传递

	someFunction.call(this, a1, a2, a3);

apply传给被调用函数的参数是Array的实例

	someFunction.apply(this, arr);

二者的第一个参数都是一样,传递被调用函数执行的上下文(this)。

bind

bind方法会创建一个新的函数实例,其this值会绑定到传给bind()的对象。

		let obj = {
            color: "blue"
        }
		let test = returnColor.bind(obj);
        test();

在控制台中我们可以看到打印了obj对象的color属性值。
在这里插入图片描述

总结

一般来说,使用call()或apply()的好处是可以将任意对象设置为任意函数的作用域,这样对象可以不用关心方法。bind()方法同理。
它们都是为了能够方便设置调用函数的上下文而出现的,也就是控制this的指向,我们可以根据一些情况合理地去利用这些方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值