希望将属性的名称作为函数中的参数传递。在Javascript中

希望将属性的名称作为函数中的参数传递。在Javascript中,javascript,Javascript,我有以下Javascript代码 var obj1 = {bob: 0, fred: 0}; var obj2 = {bob: 1, bill: 1}; function testTheory(attr) { obj1.attr += 1; obj2.attr += 2; } testTheory("bob"); 我有非常类似的PHP代码,可以很好地工作。testTheory函数应采用字符串“bob”,并尝试将其用作obj1和obj2上的属性。有没有办法用Javascrip

我有以下Javascript代码

var obj1 = {bob: 0, fred: 0};
var obj2 = {bob: 1, bill: 1};

function testTheory(attr) {
    obj1.attr += 1;
    obj2.attr += 2;
}

testTheory("bob");

我有非常类似的PHP代码,可以很好地工作。testTheory函数应采用字符串“bob”,并尝试将其用作obj1和obj2上的属性。有没有办法用Javascript实现这一点?问题的目的是,我有多个具有类似属性列表的对象,我需要合计一些属性。与其使用单独的函数来合计“bob”属性和“bill”属性,不如简单地传递我要合计的属性的名称,并让它将它们相加。我很容易在PHP中使用它,但我正在努力使用Javascript。

你可以这样做,Javascript的语法只是有点不同

function testTheory(attr) {
    obj1[attr] += 1;
    obj2[attr] += 2;
}
在属性周围使用方括号。 (旁注:这也适用于对象上的函数。)


可以这样做,javascript中的语法只是略有不同

function testTheory(attr) {
    obj1[attr] += 1;
    obj2[attr] += 2;
}
在属性周围使用方括号。 (旁注:这也适用于对象上的函数。)

试试这个:

var obj1 = {bob: 0, fred: 0};
var obj2 = {bob: 1, bill: 1};

function testTheory(attr) {
    obj1[attr] += 1;
    obj2[attr] += 2;
}

testTheory("bob");
试试这个:

var obj1 = {bob: 0, fred: 0};
var obj2 = {bob: 1, bill: 1};

function testTheory(attr) {
    obj1[attr] += 1;
    obj2[attr] += 2;
}

testTheory("bob");

简短回答:使用
obj[attr]
而不是
obj.attr

说明: 在这种情况下,JavaScript将使用
attr
检查实际的
attr
属性

假设我们有一个obj:

var obj = {name:"Bob", age:100, attr:"I am Bob"}
和两个功能:

function getAttribute1(attr){ return obj.attr; }
function getAttribute2(attr){ return obj[attr]; }
getAttribute1(“name”)
将返回“我是鲍勃”


getAttribute2(“name”)
将返回“”Bob”简短回答:使用
obj[attr]
而不是
obj.attr

说明: 在这种情况下,JavaScript将使用
attr
检查实际的
attr
属性

假设我们有一个obj:

var obj = {name:"Bob", age:100, attr:"I am Bob"}
和两个功能:

function getAttribute1(attr){ return obj.attr; }
function getAttribute2(attr){ return obj[attr]; }
getAttribute1(“name”)
将返回“我是鲍勃”


getAttribute2(“name”)
将返回“”Bob”

函数应该是这样的

function testTheory(attr) {
    obj1[attr] += 1;
    obj2[attr] += 2;
}

函数应该是这样的

function testTheory(attr) {
    obj1[attr] += 1;
    obj2[attr] += 2;
}

obj1[attr]
obj2[attr]
(括号符号)-哇。。。真是太快了,伙计们。谢谢出于某种原因,我一直在思考点符号,而没有记住可以像数组一样处理对象。只要计时器允许,我会在下面选择一个答案。“不要记住你可以像数组一样对待对象”,这也不是你应该考虑的。能够使用括号表示法访问属性是对象的特征,而不是数组的特征。数组是对象。事实上,只有使用括号表示法才能访问数组,这是由于点表示法的求值规则
foo.0
是无效的,因此您必须使用
foo[0]
foo
是对象还是数组并不重要。
obj1[attr]
obj2[attr]
(括号表示法)-哇。。。真是太快了,伙计们。谢谢出于某种原因,我一直在思考点符号,而没有记住可以像数组一样处理对象。只要计时器允许,我会在下面选择一个答案。“不要记住你可以像数组一样对待对象”,这也不是你应该考虑的。能够使用括号表示法访问属性是对象的特征,而不是数组的特征。数组是对象。事实上,只有使用括号表示法才能访问数组,这是由于点表示法的求值规则
foo.0
是无效的,因此您必须使用
foo[0]
foo
是对象还是数组并不重要。