經常在各種三方插件看到這幾個,但是對其用法區分一直懵懵懂懂的,今天抽空做了個總結
- 正常調用f1函數,this指向window
- 改變this指向
- bind
- 若想要f1裏的this依舊指向window,可如下設置(如:vue中使用導入js代碼,若想js中正常使用this,則必須通過以下方式中的任意一種改變this指向)
apply、call、bind區別、用法
都是用來改變函數的this對象的指向的;
區分用法:
var numbers = [25,35,15,195,-55 ];
//取number中的最大的值
console.log(Math.max(25,35,15,195,-55));//195
console.log(Math.max.apply(Math,numbers));//195
console.log(Math.max.call(Math,25,35,15,195,-55));//195
console.log(Math.max.bind(Math)(25,35,15,195,-55));//195
var numbers = [25,35,15,195,-55 ];
//取number中的最大的值
Math.max(25,35,15,195,-55) //195
apply 立即調用 跟參數數組 Math.max.apply(Math,numbers);//195
call 立即調用 跟數組元素 Math.max.call(Math,25,35,15,195,-55); //195
bind 不是立即調用, 此處加()手動讓其立即調用 Math.max.bind(Math)(25,35,15,195,-55);//195
var dog = {
name:'xiaowang',
gender:'girl',
age:'24',
say:function(){
console.log(this.name+","+this.gender+","+this.age);
}
}
var cat = {
name:'miaomiao',
age:'12',
gender:'boy'
}
dog.say();//xiaowang,girl,24
dog.say.apply(cat);//miaomiao,boy,12
dog.say.call(cat);
dog.say.bind(cat)();
var mama = {
name:'xiaowang',
gender:'girl',
age:'24',
say:function(like,address){
console.log(this.name+","+this.gender+","+this.age+','+like+','+address);
}
}
var baba = {
name:'miaomiao',
age:'12',
gender:'boy'
}
mama.say('化妝','北京');//xiaowang,girl,24,化妝,北京
mama.say.apply(baba,['打遊戲','武漢']);//miaomiao,boy,12,打遊戲,武漢
mama.say.call(baba,'打遊戲','武漢');
mama.say.bind(baba)('打遊戲','武漢');