用于指定或改变普通函数中的this指向;
使用call方法可以在调用函数的同时改变被调用函数中的this指向;
语法:
fun.call(指定的this值,参数1,参数2,···) //返回值是函数的返回值
如下:
const obj = {
name:'huihui',
age:18
}
function fn(a,b) {
return a * b
}
const result = fn.call(obj,5,6) //a=5,b=6,fn中的this指向obj,result=30
使用场景:
通过Object.prototype.toString.call(数据)来检测类型,比typeof()对数据类型的检测更加精确;
//Object.prototype.toString() 返回结果为[object 数据类型]
console.log(Object.prototype.toString.call('huihui')) //[object String]
console.log(Object.prototype.toString.call([1,2,3])) //[object Array]
console.log(Object.prototype.toString.call(null)) //[object Null]
与call函数类似,在调用函数的同时,可以改变被调用函数的this指向;
语法:
fun.apply(指定的this,[传递的参数]) //返回值是函数的返回值,与call的不同点是传递的参数必须在数组里;
如下:
const obj = {
name:'huihui',
age:18
}
function fn(a,b) {
return a * b
}
const result = fn.apply(obj,[5,6]) //a=5,b=6,fn中的this指向obj,result=30
使用场景:
求数组的最大/最小值;
如下:
const max = Math.max.apply(null,[4,6,8]) // max = 8
bind函数能改变函数内部this的指向,但不进行函数调用;
语法:
fun.bind(指定this,参数1,参数2,···) //返回的是改造后的新函数(拷贝函数)
如下:
const obj = {
name:'huihui',
age:18
}
function fn(a,b) {
return a * b
}
const fn1 = fn.bind(obj,5,6) //fn1中的this指向obj fn1中的参数a=5,b=6
const result = fn1() //得到result = 30
使用场景:
只想改变this指向而不想调用函数的时候;
函数名 | 是否调用函数 | 数据参数格式 | 返回值 |
call | 调用 | 参数列表 | 调用函数的返回值 |
apply | 调用 | 数组 | 调用函数的返回值 |
bind | 不调用 | 参数列表 | 拷贝后的新函数 |