为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
Why is `with` not recommended? Is there any better or other ways to "descend" into an object's namespace?
来自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)
};
这是一个相关的答案:JavaScript的"with"语句是否有合法用途?
另外: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
}
相关文章:
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 如何从其他方法访问Angular.js$scope
- 有没有一种方法可以在过滤掉iOS Chrome、Firefox和其他浏览器的同时检测iOS safari
- 停止内部事件处理程序冒泡的其他方法,jQuery
- 有没有办法将选择器返回到元素?是$(这个)还是其他方法
- 比使用大量其他 if 语句更有效的方法
- 使用一个方法在c#中启动其他方法
- 有没有一种方法可以捕获JavaScript控制台输出,以便我可以在其他地方引用它
- Meteor-如何从其他JS文件中调用外部类方法
- 使用appendchild或其他方法向ul添加html代码而不是纯文本
- 如何从指令中的其他模块调用方法
- 使用map方法将javascript对象数组转换为其他对象数组
- 用Javascript或其他方法通过语音读取整个HTML页面(离线)
- 有没有其他方法可以在远程服务器上包含php文件?除了<?php include()>
- 为什么不't我的Javascript,如果其他方法有效的话
- 有没有办法使用画布或其他方法在 HTML 中制作圆形图像
- Javascript 调用其他对象方法
- 在其他 HTML 页面中调用方法
- 如何在 emberjs 中访问其他控制器方法
- 无法获得其他方法是否可以在 HAML JavaScript 中正常工作