【发布时间】:2021-01-12 16:00:04
【问题描述】:
在我问我的问题之前,我会设置一些上下文。
我今天还在学习并做了一个练习,我不得不使用带有“this”关键字的传统函数。
将下面的示例与 console.log 一起使用,我可以检索我想要的值,例如 input.value。
let inputs = document.querySelectorAll(".controls input")
let input = document.querySelector("input")
const handleUpdate(){
console.log(this.value) \\ the output is the value of input.value eg 25
}
inputs.forEach(item=>item.addEventListener("mousemove", handleUpdate))
inputs.forEach(item=>item.addEventListener("change", handleUpdate))
但是,如果我使用带有粗箭头的 ES6 函数,则它不起作用并得到“未定义”。
在疯狂阅读文章之后,我明白“this”总是指向父对象,例如。全局对象(窗口)(如果我错了,请纠正我。因此,在这种情况下,ES6 函数总是会返回“未定义”。如果我将“this.value”更改为“input.value”,它可以正常工作,见下文。
let inputs = document.querySelectorAll(".controls input")
let input = document.querySelector("input")
const handleUpdate=()=>{
console.log(this.value) \\ undefined
console.log(input.value) \\ the output is the value of input.value eg 25
}
inputs.forEach(item=>item.addEventListener("mousemove", handleUpdate))
inputs.forEach(item=>item.addEventListener("change", handleUpdate))
我的问题是我应该使用第一种方法,它是带有“this”关键字的传统函数还是带有 ES6 语法的方法(这意味着我不能使用“this”关键字)。我用哪个重要吗?
感谢您对此的任何帮助。
【问题讨论】:
-
你应该使用解决你问题的方法。
-
谢谢,他们都解决了这个问题 :-) 但我只是想知道使用其中一个的好处。谢谢
-
箭头函数没有什么“更现代”的了。它们用于不同的事物
-
Does it matter which I use,是的,因为您发现this的处理方式不同 -
使用 ES6
function声明。
标签: javascript function ecmascript-6 this