和call唯一的区别是 参数传递的是一个数组
Function.prototype.apply = function (context, params) {
if (context === null) context = window;
// 如果传进来的是原始值类型的值 则变为对象类型的值
if (typeof context != 'funciton' && context != 'object')
context = Object(context);
let key = Symbol();
let result;
context[key] = this;
result = context[key](...params);
delete context[key];
return result;
};