为什么JavaScript bind()调用会反转函数的参数?
绑定到为什么JavaScript bind()调用会反转函数的参数?,javascript,Javascript,绑定到输入元素的oninput事件,如下所示: oninput: this.updateNote.bind(event, note) 其中note是一个简单对象({completed:bool,text:string}),event是InputEvent 我对updateNote的定义如下: updateNote(note, event) { ... } 我无法解释它的奇怪之处 updateNote的参数与bind()调用的顺序相反,但注意是正确的对象,事件是InputEvent。当您这样做
输入
元素的oninput事件,如下所示:
oninput: this.updateNote.bind(event, note)
其中note是一个简单对象({completed:bool,text:string}),event是InputEvent
我对updateNote的定义如下:
updateNote(note, event) {
...
}
我无法解释它的奇怪之处
updateNote的参数与bind()调用的顺序相反,但注意是正确的对象,事件是InputEvent。当您这样做时
this.updateNote.bind(event, note) // (1)
您可以创建一个函数boundFunc
,该函数接受任意数量的参数并调用updateNote
,其中此
等于事件
变量恰好包含的任何参数,一个参数注释
和传递给boundFunc
的其余参数。所以基本上是:
event = whatever
function boundFunc(...args) {
...updateNote.this = whatever...
updateNote(note, ...args)
}
现在,onInput
需要一个函数并用一个参数调用它,event
。由于此函数恰好是我们的boundFunc
,因此其调用方式如下:
boundFunc(event) // (2)
根据上面的说明,“updateNote”是这样调用的
updateNote(note, event)
这就解释了“颠倒”的事情。事实上,没有什么是相反的。第(2)行中的“事件”与您在
bind
第(1)行中使用的“事件”无关。只要你不在“updateNote”中使用this
,.bind
的第一个参数是新的this
值,而不是pass的第一个参数,那么它可能会丢失。这是真的,而且你可能会误解.bind()
的作用。传递给.bind()
的值是调用绑定函数时要传递的实际值。简而言之,您不能使用.bind()
来反转函数的参数顺序。如果您能解释一下您实际要完成的任务,这可能会有所帮助。我想确保updateNote()获得所有必需的信息,从而调用bind()。如果我只是将oninput属性设置为this.updateNote,我将无法同时获得note和InputEvent值。我知道bind的第一个参数设置了新的this
值,但我想知道如何将其转换为updateNote,而不会出现参数反转的问题。