Переменные JavaScript

Скажи, что у меня есть объект:

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

и массив объектов

  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

Решение

Используйте скобки

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’s $.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**
}
});
});
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]