在对象文字中使用“with”?

时间:2013-08-02 19:45:49

标签: javascript

是不是可以在javascript中使用类似“with”的东西 - 比如......

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

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

由于

更新:

我不喜欢这种语法:

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

非常混乱

2 个答案:

答案 0 :(得分: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 :(得分: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"
}