在嵌套函数中的angular中使用此关键字

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

标签: javascript typescript ecmascript-6 ecmascript-5

您好我知道如何在嵌套函数中使用组件的变量。

以下是一个例子:

export class AppComponent implements OnInit {
  name = ['Angular 6','Angular5','Angular4','Angular2'];
  isexist: string[]=[];

ifExist(text){
  var that= this;
  console.log("first ",this);
  var test="test";
  let exist= this.name.map(function (elm){
    if(elm==text) {
      console.log(this);
      this.isexist.push(elm); // works with that.isexist.push(elm); 
      }
      })
}
ngOnInit() {
  this.ifExist('Angular 6');

}

这是我在浏览器开发工具中获得的内容

first  AppComponent {name: Array(4), namev: "helo", isexist: Array(1)};
second undefined

我有一些问题 如何在不使用箭头功能的情况下访问isexist? 为什么第二个this不包含test元素?

2 个答案:

答案 0 :(得分:1)

在这里尝试lambda:

ifExist(text){
  var that= this;
  console.log("first ",this);
  var test="test";
  let exist= this.name.map((elm)=>{
    if(elm==text) {
      console.log(this);
      this.isexist.push(elm); // works with that.isexist.push(elm); 
      }
      })
}

答案 1 :(得分:1)

在不使用箭头函数的情况下无法访问ifExists的原因是箭头函数中的this与箭头函数创建的上下文具有相同的值

但是,在正常的匿名函数中,

this具有正常函数调用的上下文的值(在您的情况下,正常函数的上下文和范围仅是ifExists方法的内部。