JavaScript变量变量
JavaScript variable variables
说我有对象:
function obj()
{
this.prop1;
this.prop2;
this.prop3;
}
和一组 obj 的
objects = [new obj(),new obj(),new obj()];
我想使用 jquery 轻松遍历每个对象,其中 class 名称等同于对象的 属性。
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 中有没有简单的方法可以做到这一点?
使用括号表示法:
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 的 $.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**
}
});
});
说我有对象:
function obj()
{
this.prop1;
this.prop2;
this.prop3;
}
和一组 obj 的
objects = [new obj(),new obj(),new obj()];
我想使用 jquery 轻松遍历每个对象,其中 class 名称等同于对象的 属性。
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 中有没有简单的方法可以做到这一点?
使用括号表示法:
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 的 $.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**
}
});
});