gpt4 book ai didi

javascript - 无法在对象方法中的箭头函数上绑定(bind)上下文

转载 作者:行者123 更新时间:2023-11-30 14:25:03 24 4
gpt4 key购买 nike

所以,我有一个学校示例,但是使用 createCardPicker: () => {} 之类的箭头函数方法,它不起作用并且看不到上下文。为什么?

附言我不需要在任何其他演示文稿中重写我的对象,只是让它按原样工作。谢谢。

let deck = {
suits: ["hearts", "spades", "clubs", "diamonds"],
cards: Array(52),
createCardPicker: () => {
return () => {
let pickedCard = Math.floor(Math.random() * 52);
let pickedSuit = Math.floor(pickedCard / 13);

return alert(this.suits[pickedSuit], pickedCard % 13)
}
}
}

deck.createCardPicker.bind(deck)()(); //undefined

最佳答案

这就是箭头函数的工作方式。它“通过”this 一个级别。

这将如您所愿地工作:

let deck = {
suits: ["hearts", "spades", "clubs", "diamonds"],
cards: Array(52),
createCardPicker: function() {
return () => {
let pickedCard = Math.floor(Math.random() * 52);
let pickedSuit = Math.floor(pickedCard / 13);

return `${this.suits[pickedSuit]} ${pickedCard % 13}`
}
}
}

console.log(deck.createCardPicker.bind(deck)()()); //undefined

但是你甚至不必绑定(bind)它

let deck = {
suits: ["hearts", "spades", "clubs", "diamonds"],
cards: Array(52),
createCardPicker: function() {
return () => {
let pickedCard = Math.floor(Math.random() * 52);
let pickedSuit = Math.floor(pickedCard / 13);

return `${this.suits[pickedSuit]} ${pickedCard % 13}`
}
}
}

console.log(deck.createCardPicker()()); //undefined

关于javascript - 无法在对象方法中的箭头函数上绑定(bind)上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52077209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com