Function.prototype.call()
call()
方法使用一个指定的 this
值和单独给出的一个或多个参数来调用一个函数。
function printThisAndData(...data) { console.log(this.data, ...data); } const obj = { data: 0 }; const data = [1, 2, 3]; printThisAndData.call(obj, data); // logs: 0 [1, 2, 3] printThisAndData.call(obj, ...data); // logs: 0 1 2 3
Function.prototype.apply()
apply()
方法调用一个具有给定this
值的函数,以及以一个数组(或类数组对象)的形式提供的参数。
function printThisAndData(...data) { console.log(this.data, ...data); } const obj = { data: 0 }; const data = [1, 2, 3]; printThisAndData.apply(obj, data); // logs: 0 1 2 3 printThisAndData.apply(obj, ...data); // Throws a TypeError
Function.prototype.bind()
bind()
方法创建一个新的函数,在 bind()
被调用时,这个新函数的 this
被指定为 bind()
的第一个参数,而其余参数将作为新函数的参数,供调用时使用。
function printThisAndData(...data) { console.log(this.data, ...data); } const obj = { data: 0 }; const data = [1, 2, 3]; const printObjAndData = printThisAndData.bind(obj); printObjAndData(data); // logs: 0 [1, 2, 3] printObjAndData(...data); // logs: 0 1 2 3 const printObjTwoAndData = printThisAndData.bind(obj, 2); printObjTwoAndData(data); // logs: 0 2 [1, 2, 3] printObjTwoAndData(...data); // logs: 0 2 1 2 3