函数的方法

研究一下 call、apply 以及 bind 的区别和用法

先形象理解一下

猫吃鱼,狗吃肉,奥特曼打小怪兽。

有天狗想吃鱼了

猫.吃鱼.call(狗,鱼)

狗就吃到鱼了

猫成精了,想打怪兽

奥特曼.打小怪兽.call(猫,小怪兽)

猫也可以打小怪兽了

基本点

  • 当对函数调用callapply时都会立即执行函数
  • 当对函数调用callapply时可以将对象作为其首参

call|apply修改函数执行上下文(this指针)

1
2
3
4
5
6
7
8
9
10
let obj = {
name: 'sun',
age: '18'
}

function fun() {
console.log(this.name)
}
// fun.call(obj) // sun
fun.apply(obj) // sun

call 可以直接给函数传递其他参数

1
2
3
4
5
6
7
8
9
let obj = {
name: 'sun',
age: '18'
}

function fun(a, b) {
console.log(this, a, b)
}
fun.call(obj, 1, 2)

apply 需要封装其他参数后传递

1
2
3
4
5
6
7
8
9
let obj = {
name: 'sun',
age: '18'
}

function fun(a, b) {
console.log(this, a, b)
}
fun.apply(obj,[4,5])