如何解决如何预填充函数参数?
document.getElementById('btn').addEventListener('click',handleClick));
但是,当调用 handleClick
函数时,我想使用身份验证令牌自动预填充参数(如果存在)。所以,我有一个 withAuth
函数可以执行以下操作:
const token = 'token';
const withAuth = (fn) => {
return (...args) => {
console.log('args is ---',[...args,token]);
fn.apply(window,[token,...args]);
}
}
const handleClick = (...args) => {
console.log('handle click called----',args);
}
document.getElementById('btn').addEventListener('click',withAuth((e) => handleClick(e,'Soham')));
<button id="btn">Click Me</button>
按F12查看控制台输出; Stack Overflow 的控制台格式无法很好地处理事件对象
为什么即使第一个控制台正确捕获了事件对象,我仍然可以访问 handleClick
函数中的事件对象?难道我做错了什么?实现此类功能的最佳方法是什么?
解决方法
e
中的 withAuth((e) => handleClick(e,'Soham')))
没有收到 Event 对象,
事件对象被传递给回调函数,在这种情况下,从 withAuth
返回的函数,所以在打印 args
那里你可以看到事件对象,
那么你通过传递一些参数 (e) => handleClick(e,'Soham')
来调用这个传递的函数 [token,...args]
,但在函数中你只收到第一个参数 (e)
,
所以你可以通过 (token,event) => handleClick(token,event,'Soham')
或者只是(...args) => handleClick(...args,'Soham')
const token = 'token';
const withAuth = (fn) => {
return (...args) => {
console.log('args is ---',[...args,token]);
fn.apply(window,[token,...args]);
}
}
const handleClick = (...args) => {
console.log('handle click called----',args);
}
document.getElementById('btn').addEventListener('click',withAuth((...args) => handleClick(...args,'Soham')));
<button id="btn">Click Me</button>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。