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的参数