我正在努力使我们所有的JS代码都通过jslint传递,有时会进行大量调整,以便暂时获得旧版代码传递,以期稍后对其进行适当修复。
jslint抱怨一件事,我没有工作环境。那就是当使用这样的构造时,我们会收到错误“不要在循环内创建函数”。
for (prop in newObject) { // Check if we're overwriting an existing function if (typeof newObject[prop] === "function" && typeof _super[prop] === "function" && fnTest.test(newObject[prop])) { prototype[prop] = (function(name, func) { return function() { var result, old_super; old_super = this._super; this._super = _super[name]; result = func.apply(this, arguments); this._super = old_super; return result; }; })(prop, newObject[prop]); } }
此循环是经典继承的JS实现的一部分,在经典实现中,扩展现有类的类在调用扩展类的成员时保留扩展类的超级属性。
但是,我们还在循环中创建了函数的其他实例。
到目前为止,唯一的解决方法是将这些JS文件从jslint中排除,但是我们希望将jslint用于代码验证和语法检查,这是我们持续集成和构建工作流程的一部分。
有没有更好的方法来实现这样的功能,还是有办法通过jslint调整代码呢?
下面是代码:
function make_handler(div_id) { return function () { alert(div_id); }; } for (i ...) { div_id = divs[i].id; divs[i].onclick = make_handler(div_id); }