typescript / javascript

时间:2017-04-19 07:53:28

标签: javascript angular typescript recursion

我试图以递归方式调用以下函数。

 public  getData(key,value){

   this.htmlString += '<span style="color:cornflowerblue">'+key+' </span>:';

    if(value instanceof Object){
      Object.keys(value).forEach(function (keydata) {
        let obj = value[keydata];
        this.getData(keydata,value[keydata]);

        console.log(key,obj,obj instanceof Object)
      });
    }else{
      this.htmlString += '<span>'+value+'</span>';
    }
    return this.htmlString;
  };

当我试图调用teh函数时,它显示错误“无法读取未定义的属性'getData'。代码中是否有任何错误或以其他任何方式执行此操作。

1 个答案:

答案 0 :(得分:8)

forEach接受回调,这是一个匿名函数,匿名函数中的this在非严格模式下引用window或在严格模式下引用undefined。 / p>

您需要绑定上下文:

  Object.keys(value).forEach(function (keydata) {
    let obj = value[keydata];
    this.getData(keydata,value[keydata]);

    console.log(key,obj,obj instanceof Object)
  }.bind(this));

或使用箭头功能:

  Object.keys(value).forEach((keydata) => {
    let obj = value[keydata];
    this.getData(keydata,value[keydata]);

    console.log(key,obj,obj instanceof Object)
  });

或简单地将指针传递给this作为forEach的第二个参数:

  Object.keys(value).forEach(function (keydata) {
    let obj = value[keydata];
    this.getData(keydata,value[keydata]);

    console.log(key,obj,obj instanceof Object)
  }, this);