在循环中创建新对象实例

时间:2013-01-05 23:29:45

标签: javascript

我正在尝试通过循环为数组中的每个项创建一个新对象。对象的名称应该基于数组的键。

所以对于这个数组:

var arr = new Array(
    "some value",
    "some other value",
    "a third value"
);

会产生三个对象:

alert(object1.value);
alert(object2.value);
alert(object3.value);

我到目前为止的代码(但不起作用)是:

// Object
function fooBar(value) {
    this.value = value;
    ...
}

// Loop
var len = arr.length;
for (var i = 0; i < len; i++) {
    var objectName = object + i;
    var objectName = new fooBar(arr[i]);
}

我要求的是否有意义?

4 个答案:

答案 0 :(得分:8)

您还必须制作一个对象数组

var objs = new Array();

for(var i = 0; i < len; i++) {
  objs[i] = new fooBar(arr[i]);
}

alert(objs[0].value);

答案 1 :(得分:5)

您可以映射您的数组:

var arr = new Array(
    "some value",
    "some other value",
    "a third value"
);
var fooBars = arr.map(function(x) { return new fooBar(x); });

然后您可以访问每个值:

alert(fooBars[0].value);
// etc.

或一次处理所有内容:

fooBars.forEach(function (foo) { alert(foo.value); });

答案 2 :(得分:4)

你所要求的是有道理的,但不应该是你如何构建JavaScript。

从技术上讲,有一种方法可以创建具有动态构建名称的变量,但是你不应该使用它,因为它很慢,如果用户指定数组中的内容,它就不安全了,并且需要一对夫妇使用该功能多年来,所以你的旧东西可能会在未来的浏览器中破裂。

与此同时,您可以轻松地执行以下操作:

var obj = {},
    arr = [ "one", "two", "three" ],

    i = 0,
    len = arr.length,
    val = "",
    name = "";

for (; i < len; i += 1) {
    name = "item" + i;
    val = arr[i];
    obj[name] = val;
}

现在您可以致电obj.item1; // "two"

如果你真的很绝望,你可以使用window作为obj,所以当你在全球范围内写东西时,你可以写item0; // "one"但这真的不是'一个好主意,有几个原因(可读性,可维护性,覆盖别人财产的可能性等)。

答案 3 :(得分:3)

如果你真的想要名为so的变量,这是一个解决方案

function fooBar(value) {
    this.value = value;
}

var arr = new Array(
    "some value",
    "some other value",
    "a third value"
);

(function(context) {
    for ( var i = 0; i < arr.length; i++) {
       var key = 'object' + ( i + 1 );
       this[ key ] = new fooBar( arr[ i ] );
     }
}(window));

alert(object1.value);
alert(object2.value);
alert(object3.value);

如果您不想要全局变量object1 ...只需将关键字window替换为this,它就会为当前范围生成局部变量。

在此处测试:http://jsfiddle.net/bukart/F8ham/1/