this 的显示绑定-call、apply

简单的栗子:

function(){
  console.log(this.a);
}
var obj={

  a:2  

};

foo.call(obj);//2  call把foo中的this指向了obj

------------------------------注意↓  "装箱"

当第一个参数传入的是:字符串类型、布尔、数字类型   这个原始值会被转换成它的对象形式

new String()  

new Boolean()

new Number()

-----------------------------显示绑定-栗子1↓

function foo(){

  console.log(this.a);

}
var obj={
  a:2
};
var bar=function(){

  foo.call(obj);

};

bar();//

setTimeout(bar,100);//
bar.call(window);//
-----------------------------显示绑定-栗子2↓

function foo(something){//3
  console.log(this.a,something);this.a=2 
  return this.a+something;  //5
}
var obj={

  a:2

};

var bar=function(){
  return foo.apply(obj,arguments);  //arguments=3    foo中的this指向了obj  

};
var b=bra(3);
console.log(b);//5

-----------------------------显示绑定-栗子3---------------Function.prototye.bind↓

function foo(something){

  console.log(this.a,something);
  return this,a+something;

}

function bind(fn,obj){//辅助绑定函数

  return function(){

    return fn.apply(obj,arguments);

  }

}
var obj={

  a:2

};
var bar=bind(foo,obj);

var b=bar(3);
console.log(b);

------------------------后续详细说call、apply的参数

原文地址:https://www.cnblogs.com/trend/p/7527573.html