简单的栗子:
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的参数