Javascript angular 4无法推送未定义的数组

Javascript angular 4无法推送未定义的数组,javascript,angular,Javascript,Angular,我试图为每个间隔推送一个数组,但由于某种原因,我得到一个错误,它可能是错误类型错误:如果我使用this.numbers[this.value]=this.value,则无法设置未定义的属性'NaN'或它是core.es5.js:1020错误类型错误:如果我使用this.numbers.push(this.value),则无法读取未定义的属性“push” 这是我的密码 import { Component, OnInit } from '@angular/core'; @Component({

我试图为每个间隔推送一个数组,但由于某种原因,我得到一个错误,它可能是
错误类型错误:如果我使用
this.numbers[this.value]=this.value,则无法设置未定义的属性'NaN'
或它是
core.es5.js:1020错误类型错误:如果我使用
this.numbers.push(this.value),则无法读取未定义的属性“push”

这是我的密码

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-game-control',
  templateUrl: './game-control.component.html',
  styleUrls: ['./game-control.component.css']
})
export class GameControlComponent implements OnInit {
  timer = null;
  value: number;
  interval: number;
  numbers = [];


  constructor() { }


  ngOnInit() {
      console.log(this.numbers);
  }

  onClickStart() {
    console.log('timer called');
    if (this.timer !== null) {
      return;
    }
    this.timer = setInterval(function() {
      this.value += 1;
      // console.log(this.numbers[this.value - 1 ]);
      // this.numbers[this.value] = this.value;
      this.numbers.push(this.value);
      console.log(this.numbers);
    }, this.interval );
  }

  onClickStop() {
    clearInterval(this.timer);
    this.timer = null;
  }

}
我的html是

<div class="row">
          <div class="col-xs-12 "> 
            <button type="submit" class="btn btn-success" (click)="onClickStart()">Start</button>
            <button type="button" class="btn btn-danger" (click)="onClickStop()">Stop</button>
            <button type="button" class="btn btn-primary" >Clear</button>
          </div>
</div>
<div class="row">
  <div class="col-xs-10">

  <hr>
  <ul class="list-group">
    <a 
      class="list-group-item" 
      style="cursor: pointer"
      *ngFor="let number of numbers"
      >
      <app-even [num]="number" ></app-even>
      <app-odd [num]="number" ></app-odd> 
    </a>
  </ul>
  </div>
</div>

开始
停止
清楚的

但是我认为这并不重要

函数(){}
导致
这个
不再指向当前的类实例,正如大多数来自其他语言的人所期望的那样,使用箭头函数来获得所需的行为:

this.timer = setInterval(() => {
function(){}
导致
不再指向当前类实例,正如大多数其他语言所期望的那样,使用箭头函数来获得所需的行为:

this.timer = setInterval(() => {

我可能错了,但如果答案是正确的,说明在语义上是错误的。实际上,
setInterval
总是从全局范围运行它的参数,是他用
function()
破坏了
这个
。这将与arrow函数一起使用,因为它没有适当的
,总是从上下文中检索它。可以在那里找到一些进一步的阅读:@Kaddath不知道为什么您认为它在语义上是错误的。它与
function(){…}.bind(this)
相同。它只是确保函数中的
这个
指向定义该方法的类实例。@GünterZöchbauer从这个角度看是的,但是你的句子可以用其他方式理解,只是想说清楚(语义上不清楚会更好)@Kaddath我想我现在明白你的意思了。我更新了我的答案。我可能错了,但如果答案是正确的,说明在语义上是错误的。实际上,
setInterval
总是从全局范围运行它的参数,是他用
function()
破坏了
这个
。这将与arrow函数一起使用,因为它没有适当的
,总是从上下文中检索它。可以在那里找到一些进一步的阅读:@Kaddath不知道为什么您认为它在语义上是错误的。它与
function(){…}.bind(this)
相同。它只是确保函数中的
这个
指向定义该方法的类实例。@GünterZöchbauer从这个角度看是的,但是你的句子可以用其他方式理解,只是想说清楚(语义上不清楚会更好)@Kaddath我想我现在明白你的意思了。我更新了我的答案。