"当我们在某处传递一个匿名函数时,"这个"失去了#34;这是什么意思?

时间:2018-05-24 05:44:12

标签: javascript ecmascript-6

我正在关注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();
             }
           },
        ),
       ),
    );
}

1 个答案:

答案 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以获取针对同一解决方案的更多修复