call、apply、bind三者的异同
-
共同点 : 都可以改变this指向
-
不同点:
-
call 和 apply 会调用函数, 并且改变函数内部this指向.
-
call 和 apply传递的参数不一样,call传递参数使用逗号隔开,apply使用数组传递
-
bind 不会调用函数, 可以改变函数内部this指向.
-
-
应用场景
-
call 经常做继承.
-
apply经常跟数组有关系. 比如借助于数学对象实现数组最大值最小值
-
bind 不调用函数,但是还想改变this指向. 比如改变定时器内部的this指向.
-
fn.call(obj,1,2) //此时的this指向的是对象obj,参数使用逗号隔开
fn.apply(obj,[1,2]) //此时的this指向的是对象obj,参数使用数组传递
var f = fn.bind(obj, 1, 2); //此处的f是bind返回的新函数
具体查看手册