call
call方法的第一个参数是要绑定给this的值,后面传入的是一个参数列表。当第一个参数书null,undefined的时候,默认传给window.可以看个例子
apply
apply和call一样,第一个参数和call一样,后面传入的 参数必须要是参数数组。当第一个参数书null,undefined的时候,默认传给window。apply的例子是这样的
可以看到,obj 是作为函数上下文的对象,函数 getName 中 this 指向了 obj 这个对象。参数 firstName 和 lastName 是放在数组中传入 getName 函数。
bind
bind 方法不会立即执行,而是返回一个改变了上下文 this 后的函数。而原函数 printName 中的 this 并没有被改变,依旧指向全局对象 window。
总结
call()、apply()和bind()都是用来改变函数执行时的上下文,可借助它们实现继承;call()和apply()唯一区别是参数不一样,call()是apply()的语法糖;bind()是返回一个新函数,供以后调用,而apply()和call()是立即调用。