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

浙公网安备 33010602011771号