call
改变函数的this指向(this改变为传入的参数),并且执行函数
function fun(){
console.log(this);
}
fun.call({name:'ouyang'});//{name:'ouyang'};
//可以看出,call的用法就是把前面函数执行并且改变this为传入的参数
举个栗子:
function fn1(){
console.log(1);
}
function fn2(){
console.log(2);
}
fn1.call(fn2);//1
fn1.call.call(fn2);//2(这个暂时理解成fn1.call作一个函数,并执行它,执行它就是执行这个函数的this,而此时this指向fn2,所以执行fn2)
call 、apply方法都是一样改变this指向,只是在传递函数参数的时候不一样
bind es5新规定的,es5下不兼容(IE6~8)
bind也是改变this的指向,只不过不会立即执行
举个栗子:
function fn(num1,num2){
console.log(num1+num2);
console.log(this);
}
var obj={
name:'ouyang'
}
fn.call(obj,1,2);
//3
// {name:'ouyang'}
fn.apply(obj,[1,2])
//3
//{name:'ouyang'}
//可以看出第一个参数对象都是一样的,只是后面传递的函数需要的参数是,一个是数值列举,一个可以直接传入一个数组(更简洁)
//可以看出第一个参数对象都是一样的,只是后面传递的函数需要的参数是,一个是数值列举,一个可以直接传入一个数组
var temp=fn.bind(obj,1,2);
temp();//现在才会执行