最直白且通俗易懂的call apply bind 使用区别

创建一个函数,及一个空对象,同时使用call apply bind来操作改变函数内部的this指向,并给该函数传入参数

var obj = {}
function test (x, y) {
console.log(x)
console.log(y)
console.log(this)
}
test.call(obj, 2, 3) // call方法在使用时会直接调用
// 控制台会打印出2、3、object
test.apply(obj, [2, 3]) // apply方法在使用时会直接调用
// 控制台会打印出2、3、object
test (2, 3)
// 控制台会打印出2、3、window
let bind = test.bind(obj) //不会直接调用,但是会生成新的函数
bind(2, 3)
// 控制台会打印出2、3、object

```
1、在使用call  apply 时,一边会改变this指向,同时也会调用该函数,但原函数不会发生改变,
所以执行原函数:test(2, 3)的this还是指向的window

2、而使用bind是需要重新用一个变量去等于bind(),不会立即执行,需要手动执行,
如:let bind = a.bind(obj)
	bind()
如果是call或者apply也去这么写的话就会报错: var c = a.call(obj) //会报错,不能新命名
```

call与apply的区别是如果需要给原函数去传参时,apply是以数组的形式去传入参数,比如本例中的: test.apply(obj, [2, 3])。而call则是直接传入,如:test.call(obj, 2, 3)
说白了就是 apply()把参数打包成Array再传入;call()则是把参数按顺序传入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值