You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
13 lines
826 B
13 lines
826 B
2 years ago
|
在看 Antd 的源码时看到下面这一段,是有关 bind 的使用方法,代码不多但是深入研究的话还是有不少知识盲区的
|
||
2 years ago
|
|
||
|
```typescript
|
||
|
const rxTwoCNChar = /^[\u4e00-\u9fa5]{2}$/;
|
||
|
const isTwoCNChar = rxTwoCNChar.test.bind(rxTwoCNChar);
|
||
|
isTwoCNChar("提交")
|
||
2 years ago
|
```
|
||
|
|
||
2 years ago
|
1. 为什么需要使用 `bind` 方法改变作用域?
|
||
2 years ago
|
`rxTwoCNChar.test` 这一行赋值相当于 `RegExp.prototype.test` 直接从 RegExp 原型中取 test 方法赋值 ,而不是通过 RegExp 实例 `rxTwoCNChar` 中调用函数,所以执行时的作用域并不会指向 `rxTwoCNChar`,需要使用 `bind` 函数生成并返回一个具有指定作用域的新函数。
|
||
2 years ago
|
1. 不使用 bind 时 `rxTwoCNChar.test` 作用域指向谁?
|
||
|
1. 严格模式下 `this` 指向 `undefined`
|
||
|
2. 非严格模式下 `this` 指向 `global`
|