# 解题思路 or 实现原理
创建一个新的函数, 在 bind()
被调用时, 这个新函数的 this
被指定为 bind()
的第一个参数, 而其余参数将作为新函数的参数, 供调用时使用。
特点:
改变
this
指向返回一个函数
可以传入参数
提示
Note:
new
的优先级大于bind
, 如果bind
绑定后的函数被new
了,this
会指向当前函数的实例需要保留 原函数的原型链 上的属性和方法
# 实现代码
/*
* @Author: Rainy
* @Date: 2020-04-09 19:02:51
* @LastEditors: Rainy
* @LastEditTime: 2020-04-09 19:33:41
*/
import { ObjectMap } from 'types';
// @ts-ignore
Function.prototype._bind = function(context: ObjectMap<any>, ...args: any): any {
/* istanbul ignore next */
if (typeof this !== 'function') {
throw new TypeError('Bind must be called with a function');
}
const _context = this;
const fb = function() {
// @ts-ignore
_context.apply(this instanceof fb ? this : context, args.concat(Array.prototype.slice.call(arguments)));
};
fb.prototype = Object.create(_context.prototype);
return fb;
};
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