js中的call()函数和apply()函数:
1、主要作用:是用于指定作用域和传参
(1)用于指定作用域
1 window.color = "red"; 2 var o = { color: "blue" }; 3 var sayColor = function () { 4 debugger; 5 alert(this.color); 6 } 7 sayColor(); 8 9 sayColor.apply(this);//undefinded 10 sayColor.apply(window);//red 11 sayColor.apply(o);//blue
(2)用于传参
1 that = this; 2 var sum = function (n1, n2) { 3 debugger; 4 this.n1 = n1; 5 this.n2 = n2; 6 return this.n1 + this.n2; 7 } 8 var applySum1 = function (n1, n2) { 9 that.aaaaa = function () { }; 10 return sum.apply(that, arguments); ///that都是windown 11 } 12 var applySum2 = function (n1, n2) { 13 that.bbbbb = function () { }; 14 return sum.apply(that, [n1, n2]); ///that都是windown 15 } 16 var callSum = function (n1, n2) { 17 that.ccccc = function () { }; 18 return sum.call(that, n1, n2); ///that都是windown 19 } 20 alert(applySum1(10, 12)); //22 21 alert(applySum2(10, 13)); //23 22 alert(callSum(14, 10)); //24
2、apply()与call()解析
apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性.
Function.apply(obj,args)方法能接收两个参数
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments)
call:和apply的意思一样,只不过是参数列表不一样.
Function.call(obj,n1,n1,...);
3、apply()巧用
(1)Math.max 可以实现得到数组中最大的一项
因为Math.max 参数里面不支持Math.max([param1,param2]) 也就是数组
但是它支持Math.max(param1,param2,param3…),所以可以根据刚才apply的那个特点来解决 var max=Math.max.apply(null,array),这样轻易的可以得到一个数组中最大的一项(apply会将一个数组装换为一个参数接一个参数的传递给方法)
这块在调用的时候第一个参数给了一个null,这个是因为没有对象去调用这个方法,我只需要用这个方法帮我运算,得到返回的结果就行,.所以直接传递了一个null过去。
1 var arg = [5, 2, 1, 6, 8]; 2 var max = Math.max.apply(null, arg); 3 var min = Math.min.apply(null, arg); 4 alert("max:" + max + "---min:" + min);
结果:max:8---min:1
(2)Math.min 可以实现得到数组中最小的一项
同样和 max是一个思想 var min=Math.min.apply(null,array);
(3)可以将两个数组合并
1 var ar1 = [1, 2, 5]; 2 var ar2 = [5, 7, 9]; 3 ar1.push.apply(ar1, ar2);//ar1=[1,2,5,5,7,9]
而ar1.push(ar2);//结果ar1=[1,2,5,[5,7,9]]
时间: 2024-10-13 11:21:12