我有一个搜索文件夹树并找到所选文件夹的父文件夹的功能。
这是函数。
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);
}
}
});
}
当我用 this.getParentFolder(rootFolder, childFolder);
调用它时
它只是给我:Uncaught TypeError: this.getParentFolder is not a function 为什么是这样?在同一个文件中,我调用其他函数,它们工作得很好。这是我无法调用的唯一函数。是因为递归吗?
最佳答案
当您在 forEach
方法中更改上下文时,您必须将 this
保存在一个变量中。
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);
}
}
});
}
此外,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);
}
}
}
}
关于javascript - 无法在 javascript/Polymer 中调用我的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45717141/