首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript的"with“语句有合法的用法吗?

JavaScript的"with“语句有合法的用法吗?
EN

Stack Overflow用户
提问于 2008-09-14 18:54:32
回答 22查看 69.6K关注 0票数 383

在回答我关于with statement的问题时,Alan Storm's comments引起了我的思考。我很少找到使用这个特殊语言特性的理由,也从来没有想过它可能会带来什么麻烦。现在,我很好奇如何才能有效地使用with,同时避免它的陷阱。

您发现with语句的用处在哪里?

EN

回答 22

Stack Overflow用户

发布于 2009-09-22 19:27:04

我一直使用with语句作为作用域导入的一种简单形式。假设您有一个某种标记构建器。而不是写:

代码语言:javascript
复制
markupbuilder.div(
  markupbuilder.p('Hi! I am a paragraph!',
    markupbuilder.span('I am a span inside a paragraph')
  )
)

您可以改为这样写:

代码语言:javascript
复制
with(markupbuilder){
  div(
    p('Hi! I am a paragraph!',
      span('I am a span inside a paragraph')
    )
  )
}

对于这个用例,我没有做任何赋值,所以我没有与之相关的歧义问题。

票数 164
EN

Stack Overflow用户

发布于 2009-06-22 18:18:03

是的,是的,是的。有一种非常合法的用途。观看:

代码语言:javascript
复制
with (document.getElementById("blah").style) {
    background = "black";
    color = "blue";
    border = "1px solid green";
}

基本上,任何其他DOM或CSS挂钩都是with的奇妙用途。这并不是说"CloneNode“将是未定义的,并回到全局作用域,除非您走出自己的方式并决定使其成为可能。

Crockford抱怨的速度问题是,使用创建了一个新的上下文。上下文通常是昂贵的。我同意。但是如果你刚刚创建了一个div,并且手头没有用于设置css的框架,并且需要手动设置15个左右的CSS属性,那么创建一个上下文可能比创建变量和取消15个引用更便宜:

代码语言:javascript
复制
var element = document.createElement("div"),
    elementStyle = element.style;

elementStyle.fontWeight = "bold";
elementStyle.fontSize = "1.5em";
elementStyle.color = "#55d";
elementStyle.marginLeft = "2px";

等等。

票数 59
EN

Stack Overflow用户

发布于 2008-09-14 19:29:13

您可以定义一个小帮助器函数来提供with的好处,而不会有歧义:

代码语言:javascript
复制
var with_ = function (obj, func) { func (obj); };

with_ (object_name_here, function (_)
{
    _.a = "foo";
    _.b = "bar";
});
票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档