我能找到的几乎所有记录资源with
都警告不要使用它,主要是因为如果未定义变量,它可能会产生不可预知的影响。
我想理解它,这样我就可以有效地利用它——毕竟,它的存在是有原因的。甚至eval
有它的非邪恶用途!
所以,考虑到这一点,假设我想从一个元素中删除所有子节点,而不使用elem.innerHTML = "";
以下是安全的吗?
with(elem) while(firstChild) removeChild(firstChild);
请注意,此时我不关心可读性,只关心功能。既然firstChild
是所有元素节点的属性和removeChild
方法,那么使用with
这种方式应该没问题,对吧?
同样,假设我想设置一些样式。
with(elem.style) {
color = "red";
backgroundColor = "black";
fontWeight = "bold";
}
由于所有这些都是样式对象的属性(即使没有在样式表中定义,它们也作为空字符串存在),这样使用就可以with
了,对吧?
我是否遗漏了什么,或者是不断警告不要使用with
类似于针对 PHPmysql
扩展的警告:防止愚蠢的程序员?