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的參數
this 的顯示綁定-call、apply