# call
// 思路:将要改变this指向的方法挂到目标this上执行并返回
Function.prototype.mycall = function(context) {
if (typeof this !== "function") {
throw new TypeError("not funciton");
}
context = context || window;
context.fn = this;
let arg = [...arguments].slice(1);
let result = context.fn(...arg);
delete context.fn;
return result;
};
// 思路:将要改变this指向的方法挂到目标this上执行并返回
Function.prototype.myapply = function(context) {
if (typeof this !== "function") {
throw new TypeError("not funciton");
}
context = context || window;
context.fn = this;
let result;
if (arguments[1]) {
result = context.fn(...arguments[1]);
} else {
result = context.fn();
}
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
28
29
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
28
29