我正在关注Javascript和ES6的教程,在下面的例子中我收到错误:
" TypeError:无法读取属性' teamName'未定义的。"
导师将其解释为:"每当我们在代码库中的某处传递匿名函数时,该函数内的this
值就会丢失!"他的意思是什么?不应该this
抓住发出呼叫的对象而不是team.teamName
这意味着Avengers
会在这里返回.bind(this)
吗?我很困惑。
另外,当我们使用const team = {
members: ['Tony', 'Peter'],
teamName: 'Avengers',
teamSummary: function() {
return this.members.map(function(member) {
return `${member} is a member of ${this.teamName}`;
});
}
};
team.teamSummary();
?
Widget build(BuildContext context) {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
return new Scaffold(
body: new Container(
color: UniQueryColors.colorBackground,
child: new ListView.builder(
itemCount: 7,
itemBuilder: (BuildContext context, int index){
if (index == 0){
return addTopInfoSection();
}
},
),
),
);
}
答案 0 :(得分:0)
使用arrow function (=>)
,如下所示。它们有助于保留调用函数的this
。
const team = {
members: ['Tony', 'Peter'],
teamName: 'Avengers',
teamSummary: function() {
return this.members.map((member) => {
return `${member} is a member of ${this.teamName}`;
});
}
};
team.teamSummary();
请阅读此blog以获取针对同一解决方案的更多修复