call、apply、bind的区别

本文主要介绍call、apply、bind的区别

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

call

call方法第一个参数是要绑定给this的值,后面传入的是一个参数列表。当第一个参数为null、undefined的时候,默认指向window。

代码如下:

1
2
3
4
5
6
7
8
9
var obj = {
message: 'My name is: '
}

function getName(firstName, lastName) {
console.log(this.message + firstName + ' ' + lastName)
}

getName.call(obj, 'Dot', 'Dolby')// My name is: Dot Dolby

apply

apply接受两个参数,第一个参数是要绑定给this的值,第二个参数是一个参数数组。当第一个参数为null、undefined的时候,默认指向window。

代码如下:

1
2
3
4
5
6
7
8
9
var obj = {
message: 'My name is: '
}

function getName(firstName, lastName) {
console.log(this.message + firstName + ' ' + lastName)
}

getName.apply(obj, ['Dot', 'Dolby'])// My name is: Dot Dolby

bind

bind第一个参数是this的指向,从第二个参数开始是接收的参数列表。区别在于bind方法返回值是函数以及bind接收的参数列表的使用。

代码如下:

1
2
3
4
5
6
7
8
9
10
var obj = {
message: 'My name is: '
}

function getName(firstName, lastName) {
console.log(this.message + firstName + ' ' + lastName)
}

var dot=getName.bind(obj, 'Dot', 'Dolby')
dot()// My name is: Dot Dolby
扫一扫,请老师喝水