【发布时间】:2018-08-16 02:44:47
【问题描述】:
我最近正在制作一个 Javascript 颜色转换器(Up for Code Review),其中有两个函数在输入更改时调用(change 事件)。所以为了实现这一点,我有这样的代码:
hexInput.addEventListener("change", function() {
if (isValidColor(this.value)) {
// Conversion code
}
});
rgbInput.addEventListener("change", function() {
if (isValidColor(this.value)) {
// Conversion code
}
});
现在跟随airbnb style guide,我意识到也许我可以使用箭头函数来重新表述这两个绑定,因为它们使用的是匿名函数。所以我将代码更改为:
hexInput.addEventListener("change", () => {
if (isValidColor(this.value)) {
// Conversion code
}
});
rgbInput.addEventListener("change", () => {
if (isValidColor(this.value)) {
// Conversion code
}
});
但是,现在当我更改输入值时,什么也没有发生。所以为了尝试找出这个问题的原因,我决定打开 chrome JS 调试器,并在这些调用中添加一些断点。当我单步执行代码时,我发现了错误的根源:this.value 未定义!所以我决定用谷歌搜索这个问题并找到this question,它的答案指出“[a]rrow 函数没有 this 或 [sic] 他们自己”(链接的副本那个问题的人说箭头函数不仅仅是常规函数的较短语法)。所以现在我不知道用什么替换this.value。
这引出了我的问题:如何在不使用this.value 的情况下访问箭头函数内的输入字段的值?(请记住,我是非常 em> JS 新手)
这是一个代码sn-p,说明了我上面提到的问题:
(function() {
window.onload = function() {
document.getElementById("test").addEventListener("change", () => {
console.log(this.value);
});
}
}());
<input id="test" type="text" />
【问题讨论】:
-
在这种情况下没有理由使用箭头函数。我知道想要使用最新的东西,但是当它实际上导致的问题多于它解决的问题时......不要。
-
箭头函数不是新函数。我建议您花时间了解每个函数的用途,而不是盲目地重写所有函数。
-
我不明白为什么这个问题被否决了。即使我不知道答案在说什么,我也尽我所能通过包含我的答案来找到我的答案。 1.研究,2.我尝试通过调试解决问题。作为该语言的新手,我真的不知道要搜索什么。
-
@kevin B 对 OP 有用吗?
-
很明显,AirBnB 风格指南是毫无头绪的(再次)。 You cannot, and you should not, use arrow functions here.
标签: javascript ecmascript-6 anonymous-function arrow-functions