我有一个评估器,它返回一个对象,说明是否在页面上显示某些元素,并且它包含超过50个单独的评估。因此,仅仅观察它以检测对象成员的无效使用并不容易。以下是我希望找到帮助我解决的问题的简化示例:
var simpleExample = {
evaluationSet1: {
foo: true
},
evaluationSet2: {
bar: true
},
showButton: null
};
//Accidental mis-use
simpleExample.showButton = simpleExample.evaluationSet1.bar && simpleExample.evaluationSet2.bar;
在上面的示例中,showButton未正确计算并且将为false,因为没有在对象上定义evaluationSet1.bar。正确的语法是:
simpleExample.showButton = simpleExample.evaluationSet1.foo && simpleExample.evaluationSet2.bar;
是否有可以帮助检测此类无效用例的工具?我尝试过Jshint和Jslint,但似乎都没有标记它。
答案 0 :(得分:1)
使用队列。如果评估是连续的并且是必需的,则从evaluationSet1
处理到evaluationSetN
,否则抛出错误。也就是说,不提供访问simpleExample
的任何属性的选项。提供只能访问evaluationSet1
的功能,该功能只能开始处理,并且只能在evaluationSetN
完成处理。
主线程
const worker = new Worker("worker.js");
function handleMessageEvent(event) {
if (event.data) {
console.log("evaluation is true", event.data)
} else {
console.log("evaluation is false", event.data)
}
}
worker.addEventListener("message", handleMessageEvent);
worker.postMessage("evaluation");
Worker
帖子
function handleWorkerEvent(event) {
let bool = true;
if (event.data !== "evaluate") {
bool = false;
self.postMessage(bool);
return;
}
for (let prop of Object.keys(simpleExample)) {
let curr = simpleExample[prop];
if (curr) {
let keys = Object.keys(curr);
if (keys.length) {
for (let key of keys) {
if (!curr[key]) {
bool = false;
break;
}
}
}
} else {
bool = false;
break;
}
}
self.postMessage(bool);
}
self.addEventListener("message", handleWorkerEvent);
data.js
const simpleExample = {
evaluationSet1: {
foo: true
},
evaluationSet2: {
bar: true
},
showButton: null
};