You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Function.prototype.apply2 = function(context) {
context = context || window
// this是调用call2的函数,也就是需要执行的函数bar
context.fn = this
var result
if(arguments.length==1) {
result = context.fn()
} else{
// apply接收一个参数数组
const args = arguments[1]
const result = context.fn(...args)
}
delete context.fn
return result
}
apply的常见应用
将一个数组添加到另一个数组
var arr1 = [1,2,3]
var arr2 = [4,5,6]
arr1.push.apply(arr1, arr2)
console.log(arr1) // [1, 2, 3, 4, 5, 6]
获取数组最大或最小值
/* 找出数组中最大/小的数字 */
var numbers = [5, 6, 2, 3, 7];
var max = Math.max.apply(null, numbers);
var min = Math.min.apply(null, numbers);
如果数组长度大于参数限制,会出现预期不对。可以将数组分块来循环使用该方法:
function minOfArray(arr) {
var min = Infinity; // 无穷大
var QUANTUM = 32768; // 参数上限长度
for (var i = 0, len = arr.length; i < len; i += QUANTUM) {
var submin = Math.min.apply(null, arr.slice(i, Math.min(i + QUANTUM, len)));
min = Math.min(submin, min);
}
return min;
}
var min = minOfArray([5, 6, 2, 3, 7]);
The text was updated successfully, but these errors were encountered:
js中call和apply的模拟实现
call
发生了什么:
call的模拟
模拟的步骤可以为:
一些需要考虑的边界情况:
apply的模拟实现
apply与call实现本质没有太大区别,唯一区别在于传参时apply可以传类数组对象
apply的常见应用
将一个数组添加到另一个数组
获取数组最大或最小值
如果数组长度大于参数限制,会出现预期不对。可以将数组分块来循环使用该方法:
The text was updated successfully, but these errors were encountered: