和call唯一的区别是 参数传递的是一个数组

    1. Function.prototype.apply = function (context, params) {
    2. if (context === null) context = window;
    3. // 如果传进来的是原始值类型的值 则变为对象类型的值
    4. if (typeof context != 'funciton' && context != 'object')
    5. context = Object(context);
    6. let key = Symbol();
    7. let result;
    8. context[key] = this;
    9. result = context[key](...params);
    10. delete context[key];
    11. return result;
    12. };

    image.png

    image.png