call,apply,bind的用法以及区别

call,apply,bind的用法、区别

一,call

call方法允许你调用一个函数,并显示的指定函数内部的this值,同时可以将参数**逐个**传递给函数
举例说明

function testCall(describe, symblo) {
	let name = '张三';
  console.log(`${describe}, ${this.name}${symblo}`);
}
const objName = { name: '李四' };
// 使用 call 调用函数,并将 objName 作为 this 值
//call的第一个参数objName 用于指定this的值,即将objName 作为this传递给testCall函数
testCall.call(objName, 'Hello', '!');  //hello 李四!

二,apply

apply 方法与 call 类似,但它接收一个数组作为参数,而不是逐个传递参数。

function testCall(describe, symblo) {
	let name = '张三';
  	console.log(`${describe}, ${this.name}${symblo}`);
}
const objName = { name: '李四' };
// 使用 apply 调用函数,并将 objName 作为 this 值,这里要注意,入参是数组。
testCall.apply(objName, ['Hello', '!']);  //hello 李四!

三,bind方法

bind 方法会创建一个新的函数,这个新函数的 this 值被永久绑定到指定的对象,并且可以预先传递部分参数。

function testCall(describe, symblo) {
	let name = '张三';
  	console.log(`${describe}, ${this.name}${symblo}`);
}
const objName = { name: '李四' };
// 使用 bind 创建一个新函数,并将 objName 作为 this 值
const bindTestCall= testCall.bind(objName , 'Hello');//bind方法在这会返回一个新的函数bindTestCall,objName 作为this值,hello作为第一个参数
// 调用绑定后的函数,并传递剩余参数!!
bindTestCall('!!');//Hello 李四!!

四,区别总结

  • call和appky
    1,调用函数并立即执行
    2,区别在于函数传递方式

    call 逐个传递参数
    apply 传递一个参数数组

  • bind

    用于创建一个新的函数,将 this 值和部分参数绑定到原函数上,不会立即执行,而是返回一个新函数,在需要时调用。

五,使用场景

可以从一个对象借用另一个对象的方法

const zhangsan = {
  name: '张三',
  dealName: function() {
    console.log(this.name);
  }
};
const lisi = { name: '李四' };
// 借用 zhangsan 的 dealName 方法
zhangsan.dealName.call(lisi);//使用 call 将 lisi 作为 this 来调用 zhangsan 的 dealName 方法,这样 lisi 可以使用 zhangsan 的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值