JavaScript变量变量

时间:2015-02-23 18:58:58

标签: javascript php jquery variables variable-variables

说我有对象:

function obj()
{
  this.prop1;
  this.prop2;
  this.prop3;
}

和obj的数组

  objects = [new obj(),new obj(),new obj()];

我希望使用jquery轻松遍历每个类,其中类名等同于对象的属性。

var itemsIWantToBind = ["prop1","prop2","prop3"];
for(j=0;j<itemsIWantToBind.length;j++)
{
    $("."+itemsIWantToBind[j]).unbind().blur(function(){
        var id = $(this).siblings(".objID").html();
        if(id >= 0)
        {
            objects[id].itemsIWantToBind[j] = $(this).text());
        }
    });

}

我的问题是我希望能够使用变量来迭代这个

的项目
objects[id].itemsIWantToBind[j] = $(this).text());  
            ^^^^^^^^^^^^^^^^^

指示的部分没有正确绑定数组项的值,因为它试图绑定它的属性名称。

在php中它将与:

相同
foreach($itemsIwantToBind as $item)
{
   $objects[$id]->$item = "Something";
}

在JavaScript中有一种简单的方法吗?

1 个答案:

答案 0 :(得分:2)

使用括号表示法:

var o = new obj();
o.prop1 = "I'm the value";
var s = "prop1";
console.log(o[s]); // "I'm the value"

我认为这与你的代码有关:

["prop1","prop2","prop3"].forEach(function(prop) {  // **A**
    $("."+prop).unbind().blur(function(){
        var id = $(this).siblings(".objID").html();
        if(id >= 0)
        {
            objects[id][prop] = $(this).text());    // **B**
        }
    });
});

(B)是我们实际使用该名称的地方,但请注意(A)更改为以便我们获得一个不会改变的值。你不能只使用

// Wrong unless we also change the loop
objects[id][itemsIWantToBind[j]] = $(this).text());

因为事件发生时j将超出数组的末尾。

forEach是一个ES5功能,可以很容易地为旧浏览器填充。或者您可以使用jQuery&#39; $.each代替:

$.each(["prop1","prop2","prop3"], function(i, prop) {  // **A**
    $("."+prop).unbind().blur(function(){
        var id = $(this).siblings(".objID").html();
        if(id >= 0)
        {
            objects[id][prop] = $(this).text());       // **B**
        }
    });
});