0

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

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,但我不知道如何将其应用于上述代码。有什么帮助吗?

4

1 回答 1

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);

        // ...

    }
};
于 2013-10-20T14:30:51.483 回答