无法在javascript/Polymer中调用我的递归函数

nan*_*ots 5 javascript recursion polymer

我有一个功能,搜索文件夹树,找到所选文件夹的父文件夹.

这是功能.

        getParentFolder: function (searchroot, childFolder) {
            searchroot.subfolders.forEach(function (folder) {
                if (folder.key == childFolder.key) {
                    return searchroot;
                }
                else {
                    if (folder.subfolders) {
                        return this.getParentFolder(folder, childFolder);
                    }
                }
            });
        }
Run Code Online (Sandbox Code Playgroud)

当我打电话给这个时 this.getParentFolder(rootFolder, childFolder);

它只是给了我:Uncaught TypeError:this.getParentFolder不是函数为什么会这样?在同一个文件中,我称其他功能完全正常.这是我无法调用的唯一功能.是因为递归吗?

Ser*_* K. 5

thisforEach方法中更改上下文时,必须保留变量.

getParentFolder: function(searchroot, childFolder) {
  var self = this;
  searchroot.subfolders.forEach(function(folder) {
    if (folder.key == childFolder.key) {
      return searchroot;
    } else {
      if (folder.subfolders) {
        return self.getParentFolder(folder, childFolder);
      }
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

此外,return声明将无法按您的方式工作.我建议你使用for循环枚举数组:

getParentFolder: function(searchroot, childFolder) {
  for (var i = 0; i < searchroot.subfolders.length; i++) {
    var folder = searchroot.subfolders[i];
    if (folder.key == childFolder.key) {
      return searchroot;
    } else {
      if (folder.subfolders) {
        return self.getParentFolder(folder, childFolder);
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我看到我看到因为foreach(function())创建的临时函数改变了这个的上下文,这就是我遇到这个问题的原因是正确的吗? (2认同)