我正在实现Trie算法的添加功能,但它给了我以下错误:
未捕获的TypeError:节点不是构造函数
...在此代码行中:
node.children[char_pos]=new Array(string[0], new node());
拜托,你能告诉我发生了什么吗?
我感谢任何帮助。
这是我的代码:
var node = function(){
this.children= new Array(26);
this.last_char=false;
};
function add(word, node){
char_pos=word.charCodeAt(0) - 'a'.charCodeAt(0);
if(word.length==1){
if(node.children[char_pos]==null){
node.children[char_pos]=word[0];
node.last_char=true;
return;
}else{
return;
};
}else{
if(node.children[char_pos]==null){
node.children[char_pos]=new Array(word[0], new node());
};
};
word=word.substring(1);
add(word, node.children[char_pos][1]);
};
答案 0 :(得分:1)
首先说明
var node // = ...
然后
function add(word, node){
我想你会用一些实例的节点,一个节点,而不是你的节点构造函数来调用。
在您的功能添加中,标识符 节点解析为您的参数“node”,具有相同标识符的构造函数不可用于这里。
你会写node = new node()
你会失去节点功能吗?
标准通过命名您的构造函数或类的第一个大写字母(如Node)和Node的实例节点来帮助您解决这个问题,这样您就不会覆盖您的标识符
事实上,你真的应该选择尚未使用的标识符,因为你会覆盖它们,并使得后者不可用。