【发布时间】:2019-09-03 18:00:35
【问题描述】:
有没有办法在不丢失事件处理程序提供的this 绑定的情况下将附加参数部分应用于函数。 bind 需要 this 值,因此将 null 作为第一个参数会丢失对 DOM 元素 <button>Click</button> 的引用,否则会出现该引用。最好提供像 bind 允许这样的附加参数而不会丢失对元素的引用
const button = document.querySelector('button')
function once(...args) {
console.log(...args, this) // {prop: 'val'}, event, `Window`
button.removeEventListener('click', bound)
}
const extraArgs = {
prop: 'val'
}
const bound = once.bind(null, extraArgs)
button.addEventListener('click', bound)
<button>Click</button>
在本例中,只需传入button 作为绑定的第一个参数即可达到效果,但我感兴趣的是不要“丢失”绑定的this,而不是将其替换为对元素的引用.
如何在不丢失this DOM 元素绑定的情况下向函数提供额外的参数?
【问题讨论】:
-
传递
this作为第一个参数?真的不清楚你在问什么。 -
那里 必须 成为这个的欺骗目标,但我没有立即找到它。基本上,你必须写一个“咖喱”函数:
function curry(fn, ...args1) { return function(...args2) { return fn.call(this, ...args1, ...args2); }; } -
另外,
.bind()对=>函数没有任何作用,是吗? -
@Pointy 你是对的。我在写示例时错过了这一点。
-
请注意,您仍然可以使用
event.currentTarget访问该元素
标签: javascript dom events dom-events