call()、apply()、bind() 都是用来重定义 this 这个对象的
语法:
function.apply(thisArg, [argsArray])//argsArray 是一个可选的数组
function.call(thisArg, arg1, arg2, ...)//arg1、arg2、... 是将传递给函数的参数列表
function.bind(thisArg, arg1, arg2, ...)//arg1、arg2、... 是一些可选的参数,这些参数将在调用新函数时作为参数列表传递给原函数
function test(a, b) {
console.log(a + b);
}
test.call({ name: "call" }, 1, 2); //3
test.apply({ name: "apply" }, [2, 3]); ///5
const test1 = test.bind({ name: "bind" }, 4);
console.log(test1); //[Function: bound test]
test1(2); //6
相同点:第一个参数thisArg 表示函数要绑定的上下文,是用来改变函数this指向的,第二个参数是是用于传参
不同点:
call 和apply可以直接调用,bind不会立即调用函数,而是会返回一个新的函数
call和bind可以传递多个参数,apply只能传递一个参数 (数组或者伪数组)