美文网首页
探究call、apply、bind以及它们的区别

探究call、apply、bind以及它们的区别

作者: afeng_1234 | 来源:发表于2018-11-21 23:34 被阅读0次
call()和apply()的第一个参数是调用函数的母对象,它是改变上下文(环境),改变this指针,也就是说this的值绑定到o对象上(默认情况下this是绑定到window上)或者说o对象赋值给this;

例如 fn1.call(o); fn1.apply(o), o这个对象原先是不存在fn1方法的,想要以对象O的方法来调用fn1函数。
call和apply没有多大区别,call参数是单个参数传入,apply的第二个参数是以数组形式传入,数组是包括了类数组对象(带有length的对象)真实数组,就是说这种方式去调用的时候,参数是会当做实参参入到fn1中去;

bind() 主要作用是将函数绑定至某个对象
function f(y){
  return this.x+y;
}
var o = {x: 1};
var g = f.bind(o);   //给o对象添加一个f的引用   这里的g就是新函数,调用这个g()就相当于o.f();
g(2) //=>3

function bind(f, o){
    if (f.bind) return f.bind(o);//存在bind方法,则给o对象添加一个f的引用
    else return function(){
          return f.apply(o, arguments);
    }
}
var sum = function(x,y) {return x+y};
var succ = sum.bind(null, 1); // 绑定this的值为null, x的值为1
succ(2)//   y的值为2 ,  => 3

function f(y,z){
    return this.x + y + z;
}
var g = f.bind({x: 1}, 2); //绑定this的值为{x:1}, y的值为2,//注意这一步仅仅是新函数,还没有去调用
g(3)// z的值为3, =>6

相关文章

网友评论

      本文标题:探究call、apply、bind以及它们的区别

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