给出一个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()存在冗余,但这是我无法控制的。
答案 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 ....
}