javascript - 如何在函数定义中使用没有“this”的 bind() 方法?
问题描述
我一直在阅读有关该方法的很多内容,bind()
并且开始了解它设置this
为特定对象。这几乎总是意味着this
函数定义中的某个地方指向某个对象。但是,我在bind()
没有this
在函数定义中使用的情况下看到了。更具体地说,this
被用作一个论点,这让我感到困惑。例如,
const eventLoader = new DataLoader((eventIds) => {
return events(eventIds);
});
const events = async eventIds => {
try {
const events = await Event.find({ _id: { $in: eventIds } });
return events.map(event => {
return transformEvent(event);
});
} catch (err) {
throw err;
}
};
const user = async userId => {
try {
const user = await userLoader.load(userId.toString());
return {
...user._doc,
_id: user.id,
createdEvents: eventLoader.load.bind(this, user._doc.createdEvents)
};
} catch (err) {
throw err;
}
};
在此示例中,即使函数或函数在其函数定义中都有,也可以eventLoader.load.bind(this, user._doc.createdEvents)
用作this
参数。bind() 的第一个参数不是您希望预先存在的指向的地方吗?bind()
eventLoader
events
this
this
解决方案
bind() 的第一个参数不是您希望预先存在的 this 指向的地方吗?
对,就是这样。
在此示例中,即使函数或函数在其函数定义中都有,也可以
eventLoader.load.bind(this, user._doc.createdEvents)
用作this
参数。bind()
eventLoader
events
this
更准确地说,DataLoader.load需要this
是 DataLoader 才能正常工作。.bind
因此,对它来说eventLoader 是有意义的eventLoader.bind(eventLoader, ...)
。¹
绑定this
没有意义,因为这是window
(因为箭头函数采用父函数²的上下文,并且由于您没有父函数[从显示的代码],因此父函数是全局范围)。
¹继续阅读
²阅读更多
推荐阅读
- javascript - 使用 single-spa.config.js 时模块构建失败(来自 ./node_modules/babel-loader/lib/index.js)
- r - 如何在 ggplot 地图中绘制导入的轮廓而不是点?
- c# - 重新设计 UWP 工具包扩展器箭头
- c++ - 如何遍历所有向量元素并检查它们的变量?(C++)
- mysql - 在mysql中选择具有最大重复项的行以及不同的数据
- ios - 使用单个麦克风进行声音定位
- github-actions - 是否可以手动运行 GitHub 工作流程?
- rust - 有没有办法为 Reqwest 中的客户端设置最大池大小?
- angular - 选择项目时如何避免禁用选项
- javascript - React build - 参考错误:未定义窗口 - 如何仅在客户端运行