call apply bind

call()、apply()、bind() 都是用来重定义 this 这个对象的
call接收参数列表,apply接收数组参数,bind和call一样,但是返回值是函数需要再调用才执行
var f1 = function(a,b) {
 console.log(a+b);
}
var f2 = function(a,b,c) {
 console.log(a,b,c);
}
f2.apply(f1,[1,2]) // 1 2 undefined
var f1 = function(a,b) {
 console.log(a+b);
}
var f2 = function(a,b,c) {
 console.log(a,b,c);
}
f2.call(f1,[1,2]); // [1,2] undefined undefined
f2.call(f1, 1, 2); // 1 2 undefined
数组利用Math求最大和最小值
//apply的用法 
 var _maxNum = Math.max.apply(null,[1,3,2,4,5]) 
 console.log(_maxNum)//5 
 var _minNum = Math.min.apply(null,[1,3,2,4,5]) 
 console.log(_minNum)//1  

es6引入了Spread operator延展操作符后,即使参数是数组,可以使用call了。

let params = [1,2,3,4,5];
dada.call(obj, ... params);

改变this指向

var obj1={ 
    name: 'dada'
};
var obj2={ 
    name: 'da'
};
window.name = 'window';
var getName = function(){ 
    console.log ( this.name );
};
getName(); // 输出: window
getName.call( obj1 );// 输出: dada
getName.call(obj2 ); // 输出: da

 

 

posted @ 2021-08-10 15:30  Panda的前端笔记  阅读(39)  评论(0)    收藏  举报