call、apply和bind的区别??
call 和 apply,bind 三者都是用于改变this指向问题的
call 和 apply 的用法基本一致,call 和 apply 函数中的第一个参数都表示this指向
[ 如果当第一个参数为null、undefined时,默认指向window ]
apply 与call 相似,不同之处在于传递给方法的参数形式不一致,apply传递给方法的参数是数组的形式
call:
var fun = function(a,b){
console.log(a);//1
console.log(b);//2
console.log(this);//obj
}
var obj = {
name:'我是obj'
}
//使用call方法将函数fun的this指向 obj
fun.call(obj,1,2)
apply:
var obj1 = {
name:'我是obj1'
}
fun.apply(obj1,[3,4]);
bind 不会立即执行,而是先返回改变this指向后的新方法。
var obj2 = {
x : "x",
fn : function(y){
console.log(this.x + " ; " + y);
}
}
fn.bind(obj,1); //返回fn方法
var bfn = fn.bind(obj);
bfn(1); //x 1