# 解题思路 or 实现原理
使用一个指定的 this
值和单独给出的一个或多个参数来调用一个函数。
首先
context
为可选参数,如果不传的话默认上下文为window
接下来给
context
创建一个fn
属性,并将值设置为需要调用的函数因为
call
可以传入多个参数作为调用函数的参数,所以需要将参数剥离出来然后调用函数并将对象上的函数删除
# 实现代码
/*
* @Author: Rainy
* @Date: 2019-11-14 19:25:01
* @LastEditors: Rainy
* @LastEditTime: 2020-04-09 19:00:57
*/
import { ObjectMap } from 'types';
// @ts-ignore
Function.prototype._call = function(context: ObjectMap<any>, ...arg: any): any {
/* istanbul ignore next */
if (typeof this !== 'function') {
throw new TypeError('Error');
}
/* istanbul ignore next */
context = context ? Object(context) : window
context.fn = this;
const result = context.fn(...arg);
delete context.fn;
return result;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 参考
← bind instanceof →