问题。
我用抽象方法 M 创建了一个抽象类 A 。我在派生类 B 中实现它。但是, M (在 B 中)的实现要求我递归调用它。这样做时,会出现undefined property M
错误。我怀疑这与this
的绑定有关。无法找出解决办法。
详细信息。
我正在尝试在打字稿的抽象语法树(AST)上执行简单的DFS。我创建了一个抽象类Graph
,该类定义了接受文件的方法,并将该文件的AST对象定义为抽象visit
方法。我想在AST对象上使用不同类型的遍历重载visit
。
这是抽象类
import * as fs from 'fs';
import * as ts from 'typescript';
// Base class to parse ASTs
export abstract class Graph {
private ast_path: string;
constructor(ast_path:string) {
this.ast_path = ast_path;
}
abstract visit (node: ts.Node): void;
public ast2graph() {
console.log("in ast_parse")
const source_code = fs.readFileSync(this.ast_path, 'utf-8')
const source_obj = ts.createSourceFile(this.ast_path, source_code, ts.ScriptTarget.Latest, true);
this.visit(source_obj);
}
}
我在类visit
中实现了抽象的GraphImpl
方法,在这里我递归地尝试遍历所有节点。
import * as fs from 'fs';
import * as ts from 'typescript';
import { Graph } from "./graph";
class GraphImpl extends Graph {
constructor(ast_path:string) {
super(ast_path);
}
visit(node: ts.Node): (void) {
console.log('In visit..');
// console.log(node);
console.log(ts.SyntaxKind[node.kind]);
console.log('--');
node.forEachChild(this.visit);
}
}
// Unit-test
const inputFile = process.argv[2];
var graph_obj = new GraphImpl(inputFile);
graph_obj.ast2graph();
这样做时,出现以下错误-
node.forEachChild(this.visit);
^
TypeError: Cannot read property 'visit' of undefined
当我取消整个类结构并仅实现一个函数visit()
,并向其传递一个source_obj
时,此方法就可以正常工作。
它似乎与this
及其绑定密切相关,同时递归传递它。虽然无法找出解决方法。
建议?