打字稿/ javascript中的递归函数

sra*_*thi 10 javascript recursion typescript angular

我试图递归调用以下函数.

 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;
  };
Run Code Online (Sandbox Code Playgroud)

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

Max*_*kyi 13

forEach接受回调,这是一个匿名函数,匿名函数this内部指window的是非严格模式或undefined严格模式.

你需要绑定上下文:

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

    console.log(key,obj,obj instanceof Object)
  }.bind(this));
Run Code Online (Sandbox Code Playgroud)

或使用箭头功能:

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

    console.log(key,obj,obj instanceof Object)
  });
Run Code Online (Sandbox Code Playgroud)

或者只是将指针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);
Run Code Online (Sandbox Code Playgroud)

  • 您还可以传递 [*thisArg*](http://ecma-international.org/ecma-262/7.0/index.html#sec-array.prototype.foreach) 作为第二个参数。*this* 不是“上下文”,它是执行上下文的参数。 (2认同)