call,apply和bind都是js中强制改变this指向的方法。具体用法以及差异如下:
1. call()
用法:
call(this指向对象,参数1,参数2……)
例:在直接调用方法时,this指向window
使用call改变this指向后:this指向对象obj1
call有参数传递时:参数依次用逗号排在对象后
2. apply()
用法:
apply(this 指向对象,[参数1,参数2……])
例同上:在直接调用方法时,this指向window
使用apply改变this指向后:this指向对象obj1
apply有参数传递时,参数放在对象后的数组内
3. bind()
用法:
bind(this指向对象,参数1,参数2……)
bind和那两种的区别是,call和apply在调用时会立即执行函数fun,而bind只会绑定this指向的对象不会立即执行。
只有执行bind绑定后的函数,才会看到this指向的改变,这里只用立即执行函数演示
bind传递参数同call
利用bind只绑定不执行的特点还可以将this绑定给第三个声明,然后这个声明就是指向的绑定对象,然后去执行这个声明