解决JSHint的“不要使用'与'”的建议

时间:2013-10-20 14:13:13

标签: jquery jslint jshint

我正在使用2006年编写的脚本并重写它,以便遵循最佳实践,并将来包含在一个副项目中。我使用JSHint.com来解决问题并搜索SO以寻找其发现的其他问题的解决方案。但是,我无法解决JSHint的“请勿使用'带'”错误。这是代码:

DragResize.prototype.select = function (newElement) {

    with(this) {
        // Selects an element for dragging.
        if (!document.getElementById || !enabled) return;

        // Activate and record our new dragging element.
        if (newElement && (newElement != element) && enabled) {
            element = newElement;

            // Elevate it and give it resize handles.
            element.style.zIndex = ++zIndex;
            if (this.resizeHandleSet) this.resizeHandleSet(element, true);

            // Record element attributes for mouseMove().
            elmX = parseInt(element.style.left);
            elmY = parseInt(element.style.top);
            elmW = element.offsetWidth;
            elmH = element.offsetHeight;
            if (ondragfocus) this.ondragfocus();
        }
    }

};

我设法找到的唯一解释是http://jslinterrors.com/unexpected-with,但我不知道如何将其应用于上述代码。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

该代码是一个很好的例子,说明为什么with语句如此可怕!要解决JSHint警告,您需要知道with语句正文中引用的标识符实际上是DragResize实例(this)的属性,哪些实际引用了外部范围内的变量。

例如,如果element是实例的属性,则需要使用this为这些引用添加前缀:

DragResize.prototype.select = function (newElement) {

    if (!document.getElementById || !enabled) return;

    if (newElement && (newElement != element) && enabled) {
        this.element = newElement;
//      ^ prefix instance properties with reference to the instance

        this.element.style.zIndex = ++zIndex;
        if (this.resizeHandleSet) this.resizeHandleSet(element, true);

        // ...

    }
};
相关问题