从MDN:
不建议使用with
,并且在ECMAScript 5严格模式下禁止使用。推荐的替代方法是将要访问其属性的对象分配给临时变量。
似乎是一个很棒/有用/方便的功能。为什么皱眉呢?还有什么其他方法可以达到这种效果?我不想去:
veryLongNS.y = veryLongNS.myFunc(veryLongNS.x);
veryLongNS.z = 6;
veryLongNS.otherFunc();
veryLongNS.a = {
a:1,
b:2,
c:veryLongNS.processThree(3)
};
最佳答案
这是一个相关的答案:
Are there legitimate uses for JavaScript's "with" statement?
另外:http://yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/
下列替代方案怎么样?
(function(obj) {
obj.y = obj.myFunc(obj.x);
obj.z = 6;
obj.otherFunc();
obj.a = {a:1,b:2,c:obj.processThree(3)};
})(myAwkwardlyNamedObjectToBeUsedAsANameSpaceThatIWishToModifyAndNotJustRead);
编辑:为了清楚和后代,这也是可能的(并且在大多数情况下,上述情况更可取-我不建议在全局范围内执行此操作,但我不建议在全局范围内执行任何操作):
function someFunction() {
// in some function
var obj = myAwkwardlyNamedObjectToBeUsedAsANameSpaceThatIWishToModifyAndNotJustRead;
obj.y = obj.myFunc(obj.x);
obj.z = 6;
obj.otherFunc();
obj.a = {a:1,b:2,c:obj.processThree(3)};
// ... any other stuff in the function
}
关于javascript - 为什么不建议使用with?有没有更好的方法或其他方式“降级”到对象的 namespace ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12381301/