提问人:1sentenced 提问时间:10/18/2022 最后编辑:1sentenced 更新时间:10/18/2022 访问量:105
在 Array.map 回调中无法理解此上下文
Having trouble understanding this context in Array.map callback
问:
我在 React 组件中有以下代码片段。这是一个微不足道的例子,但我正在努力更好地理解关键字及其上下文this
const NAVBAR_ITEM_TITLES = ["Home", "About", "Contact"];
function makeNavbarItems() {
return NAVBAR_ITEM_TITLES.map(item => ({
title: item,
handleButtonClick() {
console.log(`clicked the ${this.title} button`);
},
}));
}
const Navbar = () => {
const navbarItems = makeNavbarItems();
return (
<>
{navbarItems.map(item => (
<div>
<button key={item.title} onClick={item.handleButtonClick}>
{item.title}
</button>
</div>
))}
</>
);
};
我写了一个小函数,它返回一些匿名对象来填充导航栏。但是,返回的匿名对象中的上下文是未定义的。我知道如果我创建一个命名对象,那么我可以访问 title 属性,例如 ,但我想了解我做错了什么以及如何解决它。this
map
myObj
myObj.title
干杯。
答:
3赞
Terry
10/18/2022
#1
您已经可以访问该字符串,并将其别名化为: 根本没有必要使用:item
title
this
function makeNavbarItems() {
return NAVBAR_ITEM_TITLES.map(item => ({
title: item,
handleButtonClick() {
console.log(`clicked the ${item} button`);
},
}));
}
0赞
Jimbot
10/18/2022
#2
this
始终引用当前上下文中的对象,在本例中,引用使用原型创建的新对象。正如@Terry所说,这里没有必要。在某些情况下,您需要区分两个名称相同但作用域不同的表达式。(例如,一个全局变量和一个同名的局部变量)。this
评论
undefined
() => {}
handleButtonClick
this