在我的created()
钩子中,我有以下代码:
{
created() {
window.addEventListener('keydown', this.someMethod)
},
methods: {
someMethod(event) {
console.log(event)
// do stuff
}
}
}
控制台日志没有触发。我做错了什么?以下方法有效:
const someMethod = event => {
console.log(event)
}
export default {
... other stuff
created() {
window.addEventListener('keydown', this.someMethod)
},
}
编辑:我的问题似乎有些混乱。我不是在问如何在函数中使用this
关键字。你可以使用arrow函数。我的问题是我似乎不能将对象的方法作为回调函数传递。
3条答案
按热度按时间disbfnqx1#
您应该将回调设置为
addEventListener
函数的第二个参数,并在其中调用您的方法,建议使用arrow函数以便在回调范围内访问this
:qxsslcnc2#
catch在以下代码中
someMethod
是fn
,调用它的对象引用this
。现在这里
this
的值是什么,关于dynamic
作用域的基本定义状态开始起作用,动态作用域的fn
将在get调用时具有this
的值,而不是在它们被写入的地方。因此,当
keydown
发生时,它实际上是事情发生的时间,并根据输入工作,这意味着-this
是window
,而不是vue
上下文。要解决这个问题,我们需要使
this
成为词法作用域,这意味着this
的值应该是method
的写入位置。ES6 Arrow是第一个答案中提到的好选项
5lhxktic3#