美文网首页
call apply bind

call apply bind

作者: 不知所踪oy | 来源:发表于2018-04-26 17:26 被阅读0次
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();//现在才会执行

相关文章

网友评论

      本文标题:call apply bind

      本文链接:https://www.haomeiwen.com/subject/lyhmlftx.html