这三个方法都是写到Function对象的原型上的,也就是写到Function.prototype上的;其中bind方法是ES5里新增的。
bind方法
bind方法第一个参数是指定this,其他是直接传递给函数的参数。
用来固定某个函数的this和参数并返回一个函数等待后续调用。
function demo(a, b) {
console.log(this, a, b);
}
let fn = demo.bind("this is bind", 12) // 没有任何输出,说明没有执行
fn() // "this is bind" 12 undefined
fn(10) // "this is bind" 12 10
// bind方法可以在需要的时候再调用,也可以在调用的时候再添加参数,并且原有的参数也不会被覆盖。
call方法
call 方法第一个参数是指定this,其他是直接传递给函数的参数
demo.call("this is call",1) // "this is call" 1 undefined
demo.call("this is call", 1, 2) // "this is call" 1 2
//call方法是在指定this 和参数后立即调用这个函数
apply方法
apply方法第一个参数是指定this,第二个参数是传递给函数的参数的的数组;apply方法只有两个参数。
可以用于不知道参数个数的场景
demo.apply("this is apply", [1]) // "this is apply" 1 undefined
demo.apply("this is apply", [1,2]) // "this is apply" 1 2
// apply方法也是在指定this和参数后立即调用
总结
call和apply方法都是在指定this和参数后立即执行,区别是传递给函数的参数形式不一样;bind方法是在指定this和参数后返回一个函数,什么时候需要调用了再调用,并且可以在调用的时候添加参数,其他的和call方法一样
网友评论