阅读一段 TypeScript(上下文 Angular)时,发现了 JavaScript bind 函数的令人困惑的用法。有人能解释一下这个模式吗?示例 1const f = this.bind('astring');return f ? f(
在阅读一段 TypeScript(上下文 Angular)时,发现了 JavaScript bind 函数的令人困惑的用法。有人能解释一下这种模式吗?
示例 1
const f = this.bind('astring');
return f ? f(someArgs) : someDefaultReturn;
这里 用了好几次 .
根据 docs ,bind 的用法表明它在一个函数上被调用并传递一个对象,如下所示:
示例 2
const f = someFunc.bind(someObject);
其中 f 是一个调用 someFunc 的函数,并且在调用 f 时使其“this”上下文等于 someObject,这一切都是有道理的。
但是,当运行顶部示例 1 中的模式中的代码时,someFunc ('this') 变成一个对象(实际上是具有 'bind' 的类的实例,因此,从技术上讲它可能是一个函数),而 someObject ('astring') 是一个原始值而不是对象(是的,我知道所有原始值实际上都包装在对象中)。这完全让我不知所措。
这段代码在做什么以及怎样做的?
在第一个例子中, bind
被调用的方法是 BackendService
类内部的方法:
protected bind<T extends Function>(methodName: string) {
const fn = (this.inMemDbService as any)[methodName];
return fn ? (fn.bind(this.inMemDbService) as T) : undefined;
}
可以看到,这个内部 bind
方法在 methodName
内部 inMemDbService
,并将方法和对象进行绑定。