我有一个昨晚在工作的类对象。但是现在我尝试测试我设置的Hash方法,然后这样做:等等= new HashTable;并说未定义HashTable。
我还有一个未在此处链接的文件,并且其所有变量也都显示为undefined(在控制台中)。我发誓昨天晚上我做了这个工作,所以我很沮丧。
我遇到了一个也许以前没有注意到的错误,但它说
错误:解析错误:关键字'class'已保留 class HashTable
JSLint(2) 应该是标识符和看到的是“类” 。 停下来(已扫描4%)。
我在做什么错?有人帮忙。
我的愿望只是能够在控制台中测试我的javascript代码,以确保一切正常。我尝试了google chrome的代码段,但其中存在错误。我尝试了Codepen,它是一个沙箱,所以现在在控制台中它无法在控制台中正常工作,也不允许我在控制台中进行测试。变得如此沮丧。
class HashTable {
constructor(size){
this.keyMap = new Array(size);
}
function _hash(key) {
let total = 0;
let prime = 31
for (let i = 0; i < Math.min(key.length, 100); i++) {
let char = key[i];
let value = char.charCodeAt(0) - 96;
total = (total * prime + value) % this.keyMap;
}
return total;
}
function set(key){
hashNumber = this._hash(key);
return hashNumber;
}
}
-
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src = "app.js"></script>
<script src = "hash.js"></script>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Please work</h1>
</body>
</html>
答案 0 :(得分:2)
我不知道它是否与您所指出的错误特别相关,但是您的HashTable
类中包含语法错误。您无需使用function
来定义class
构造中的类的方法。所以:
class HashTable {
constructor(size){
this.keyMap = new Array(size);
}
_hash(key) {
// ^--------------------------------------- no `function` here
let total = 0;
let prime = 31
for (let i = 0; i < Math.min(key.length, 100); i++) {
let char = key[i];
let value = char.charCodeAt(0) - 96;
total = (total * prime + value) % this.keyMap;
}
return total;
}
set(key) {
// ^--------------------------------------- nor here
hashNumber = this._hash(key);
return hashNumber;
}
}
其他说明:
几乎没有任何理由使用new Array
。
您正在使用已分配给this.keyMap
的数组作为表达式total = (total * prime + value) % this.keyMap;
中的数字,这没有任何意义。
我建议一次计算您的for
循环的上限,然后重用该值,而不是在每次循环迭代时都要计算它。
答案 1 :(得分:0)