mqyqingfeng / Blog

冴羽写博客的地方,预计写四个系列:JavaScript深入系列、JavaScript专题系列、ES6系列、React系列。
30.53k stars 4.7k forks source link

apply模拟实现疑问 #249

Open WuliWalter opened 2 years ago

WuliWalter commented 2 years ago
Function.prototype.apply = function (context, arr) {
    var context = Object(context) || window;
    context.fn = this;

    var result;
    if (!arr) {
        result = context.fn();
    }
    else {
        var args = [];
        for (var i = 0, len = arr.length; i < len; i++) {
            args.push('arr[' + i + ']');
        }
        result = eval('context.fn(' + args + ')')
    }

    delete context.fn
    return result;
}

前辈,apply模拟实现arr不能直接用吗为什么还要

 var args = [];
        for (var i = 0, len = arr.length; i < len; i++) {
            args.push('arr[' + i + ']');
        }
        result = eval('context.fn(' + args + ')')

做一次这样的操作

mqyqingfeng commented 2 years ago

@WuliWalter 可以参考这个回答 https://github.com/mqyqingfeng/Blog/issues/11#issuecomment-302026366_