![](/img/trans.png)
[英]Inheritance in Babel transpiled ES2015 not working due to no class hoisting
[英]Recursive method call on es2015 class method transpiled with babel
我尝试递归调用实例方法时遇到问题。
该代码如下所示:
import fs from 'fs';
import fsWatcher from 'filewatcher';
import path from 'path';
export default class SearchService {
initializeFileWatcher(foldersToWatch) {
let result = fsWatcher();
for (var i = 0; i < foldersToWatch.length; i++) {
result.add(foldersToWatch[i]);
}
return result;
}
getFilesFromDirectoriesRecursively(directories, fileExtension) {
let result = [];
for (var i = 0; i < directories.length; i++) {
var dir = directories[i];
var list = fs.readdirSync(dir);
list.forEach(function (file) {
file = dir + '/' + file;
var stat = fs.statSync(file);
if (stat && stat.isDirectory())
result = result.concat(this.getFilesFromDirectoriesRecursively([file], fileExtension).bind(this));
else
if (path.extname(file) === fileExtension)
result.push(file);
});
}
return result;
}
getFilesFromDirectory(directory, fileExtension) {
var result = [];
var files = fs.readdirSync(directory);
for (var i = 0; i < files.length; i++) {
if (files[i].endsWith(fileExtension))
result.push(files[i]);
}
return result;
}
}
该代码随babel-es2015一起编译,并在电子应用程序环境中运行。 没有当我尝试调用该方法getFilesFromDirectoriesRecursively内部本身transpiled码获得,因为这里面点到实例中ES2015而不是在transpiled代码的麻烦。
我该如何解决这个问题?
我可以解决问题。 正如@zerkms提到的那样,使用this关键字为false。 我试图将其与.bind
关键字绑定,但不适用于匿名函数。
所以我应用了这里描述的解决方案: 如何将上下文传递给forEach()匿名函数
list.forEach( (file) => {
file = dir + '/' + file;
let stat = fs.statSync(file);
if (stat && stat.isDirectory())
result = result.concat(this.getFilesFromDirectoriesRecursively([file], fileExtension));
else
if (path.extname(file) === fileExtension)
result.push(file);
}, this);
现在,它经过这闭合上在foreach函数调用
不必通过此操作,因为arrow函数正在执行此操作。
list.forEach( (file) => {
file = dir + '/' + file;
let stat = fs.statSync(file);
if (stat && stat.isDirectory())
result = result.concat(this.getFilesFromDirectoriesRecursively([file], fileExtension));
else
if (path.extname(file) === fileExtension)
result.push(file);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.