我正在使用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,但我不知道如何将其应用于上述代码。有什么帮助吗?
答案 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);
// ...
}
};