【JS Web 前端知识库】16.说一说call apply bind的作用和区别?

1 篇文章 0 订阅
1 篇文章 0 订阅
call、apply、bind都是用来改变函数执行时的this指向。call和apply会立即执行函数,bind则返回一个新函数供后续调用。call接受单个对象参数和按位置传递的参数,apply接受对象参数(通常是数组),bind则允许预先设置this并可传入参数。应用场景包括对象继承、数组操作和框架中方法的this绑定。
摘要由CSDN通过智能技术生成

16.说一说call apply bind的作用和区别?

得分点:

bind改变this指向不直接调用、
callapply改变this指向直接调用、
apply接收第二个参数为数组、
call用于对象的继承、
⑤ 伪数组转换成真数组、
apply用于找出数组中的最大值和最小值以及数组合并、
bind用于vue或者react框架中改变函数的this指向

标准回答

  1. call、apply、bind作用
    都是改变函数运行时的this指向。

  2. bindcallapply使用上有所不同:
    bind在改变this指向的时候,返回一个改变执行上下文的函数,不会立即执行函数,而是需要调用该函数的时候再调用即可,但是callapply在改变this指向的同时执行了该函数。
    bind只接收一个参数,就是this指向的执行上文
    callapply接收多个参数,第一个参数都是this指向的执行上文,后面的参数都是作为改变this指向的函数的参数。但是callapply参数的格式不同,call是一个参数对应一个原函数的参数,但是apply第二个参数是数组,数组中每个元素代表函数接收的参数,数组有几个元素函数就接收几个元素。

加分回答

  1. call的应用场景:

对象的继承,在子构造函数这种调用父构造函数,但是改变this指向,就可以继承父的属性

		function superClass() {
           this.a = 1
            this.print = function() {
                console.log(this.a)
            }
        }
        function subClass() {
            superClass.call(this) // 执行superClass,
        }

并将superClass方法中的this指向subClass();借用Array原型链上的slice方法,把伪数组转换成真数组

let domNodes = Array.prototype.slice.call(document.getElementsByTagName("div")); 
  1. apply的应用场景:

Math.max,获取数组中最大、最小的一项

   let max = Math.max.apply(null, array);
   let min = Math.min.apply(null, array); 

实现两个数组合并

 	let arr1 = [1, 2, 3]; 
 	let arr2 = [4, 5, 6]; 
 	Array.prototype.push.apply(arr1, arr2); 
 	console.log(arr1); // [1, 2, 3, 4, 5, 6]
  1. bind的应用场景:

vue或者react框架中,使用bind将定义的方法中的this指向当前类

💞💖💓💗每个时代,
✨🌟⭐️💫都悄悄犒赏会学习的人。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

随风一样自由

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

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

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

打赏作者

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

抵扣说明:

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

余额充值