2013-08-02 29 views
0

是不是可以做到使用类似 “与” 在JavaScript - 像...在对象字面量中使用“with”?

var test = { 
    vars: { 
     customer: { 
      Name: '', 
      Address: '', 
      Town: '' 
     } 
    }, 

    Init: function() { 
     with this.vars.customer { 
      Name = 'Mike'; 
      Address = 'Union Square 2'; 
      Town = 'San Francisco'; 
     }  
    } 
} 

感谢

UPDATE:

我不喜欢这种语法:

Init: function() { 
      this.vars.customer.Name = 'Mike'; 
      this.vars.customer.Address = 'Union Square 2'; 
      this.vars.customer.Town = 'San Francisco'; 
     } 

这是相当混乱

+0

可能的,但不推荐。至少mozilla不推荐它。 – Rooster

+0

你为什么要这样做? –

+1

你的问题是什么?你不确定语法吗? – Esailija

回答

0
this.vars.customer = { 
    Name: 'Mike'; 
    Address: 'Union Square 2'; 
    Town: 'San Francisco'; 
} 

如果它是关于设置的属性,也许你可以做这样的事情。它远离with替代品,但它可能有它的用途,并且它比with更不笨。

function mergeObject(obj, into){ 
    for (var key in obj){ 
     if (obj.hasOwnProperty(key)){ 
      into[key] = obj[key]; 
     } 
    } 
} 

var o = {test: 'Hello', test2: 'world'}; 
// Add/set properties to o. 
mergeObject({foo: 'foo', bar: 'FOO'}, o); 


alert(o.test + o.foo); 

http://jsfiddle.net/a2BTY/

+1

这将创建一个新对象,而不仅仅是改变现有对象的属性。如果现有对象的引用被保存在某个地方,或者您没有在这里设置的现有对象的属性,它将不会相同。 – Gabe

+0

你说得对,Gabe。这是要记住的。严格来说,这意味着问题的实际答案是'不'。 :) – GolezTrol

+0

@GolezTrol err ..它工作得很好,因为它把它放在http://jsfiddle.net/YTEAb/ – Esailija

0

The "with" keyword在JavaScript中。

不推荐使用,因为如果不小心的话,它可能会产生模棱两可的变量范围。我觉得这里给出其他答案是更好的JS编码实践

例如使用

x = { subObj: {a: 100, b: 200} }; 

with (x.subObj) { 
    console.log(a); // should show 100 
    b = "what"; // should assign x.subObj.b to be "what now" 
}