如何将JS对象文字名称值对传递给另一个函数

时间:2012-12-31 21:44:04

标签: javascript object-literal

给出一个JS文字对象,如:

var foo = {
    _stuff : {
        a:10,
        b:20,
        c:30,
        state
    }
}

和文字函数

addAB: function() {
    add(foo._stuff[a], foo._stuff[b]);
}

addAC: function() {
    add(foo._stuff[a], foo._stuff[c]);
}

add: function(bar, baz) {
    foo._stuff[bar] += foo._stuff[baz];
    state(foo._stuff[bar]);
}

state: function(value) {
   foo.state[value] = .... something complex ....
}

如何一次性获得以下内容?

add(AB); foo._stuff[a] should be 30, foo.state[foo._stuff[a]] is something new
add(AC); foo._stuff[a] should be 40, foo.state[foo._stuff[a]] is something new

因为add()将尝试查找foo._stuff [10],它显然不会做我想要的。

是的我知道addAB()和addAC()存在冗余,但这是我无法控制的。

3 个答案:

答案 0 :(得分:2)

传递索引而不是值,如下所示:

addAB: function() {
    add('a', 'b');
}

addAC: function() {
    add('a', 'c');
}

答案 1 :(得分:0)

add: function(bar, baz) {
    if (arguments.length === 1) {
        this['add' + arguments[0]];
    } else {
      foo._stuff[bar] += foo._stuff[baz];
      state(foo._stuff[bar]);
    }
}

// assuming you are calling
var AB = 'AB', AC = 'AC';
add(AB); 
add(AC);

否则,我不知道你在问什么。

答案 2 :(得分:0)

我不确定我是否完全遵循您想要完成的任务,但您的对象文字不是有效的语法。我不明白为什么你想要_stuff属性。并且,您需要将state属性初始化为某个值,即使它未定义。但是,由于您希望根据某些属性名称在state属性中存储值,因此应将state初始化为对象。

var foo = {
    a:10,
    b:20,
    c:30,
    state: {}
}

你的javascript:

addAB: function() {
    add('a', 'b');
}

addAC: function() {
    add('a', 'c');
}

add: function(propName0, propName1) {
    foo[propName0] += foo[propName1];
    state(propName0);
}

state: function(propName) {
    // state is initialized to an object, so can store properties in there now
   foo.state[propName] = .... something complex ....
}