您可以在其构造函数中向对象添加对象吗?

时间:2014-01-31 20:17:48

标签: javascript arrays object this

我正在尝试将对象添加到具有特定id的数组中,我需要在构造函数中知道。这有用吗?

objectArray = [];
function newObject (name, age, eyeColour) {
this.name = name;
this.age = age;
this.eyeColour = eyeColour;
var id = *some integer* 
this.id = id;
objectArray[id] = this;    //This is the line in question.
}

显然这只是一个例子。在我的真实代码中,我在3个新DOM对象的id中使用id,所以我需要在构造函数中使用它。

2 个答案:

答案 0 :(得分:2)

如果id是一个数字,那肯定会有效,数组就是要通过它们的索引来访问。只要全局声明objectArray,您在代码中始终看到这一点并且在构造函数中无关紧要:

var arr = ["one", "two"];

for(var i =0; i < arr.length; i++){
   alert(arr[i]);
}

如果id不是您最有可能使用某个对象的数字。

var obj = {one: 1, two: 2};
alert(obj["one"]);

以下是使用您的代码的示例:

var objectArray = []

function newObject (name, age, eyeColour) {
    this.name = name;
    this.age = age;
    this.eyeColour = eyeColour;
    var id = 3
    this.id = id;
    objectArray[id] = this;    //This is the line in question.
}

newObject("Kevin", "30", "Blue");
alert(objectArray[3].name);

有一点需要注意的是,如果您的计算ID与实际数组不同步,那么假设您在数组为空时将对象分配给第三个索引,array.length将返回4但是数组只包含1个元素。

答案 1 :(得分:2)

是的,这很有效。但您应该定义您的ID - 您缺少关键字var。 如果id不是数字,而是字符串,则将objectArray定义为Object时,它将起作用。 (不是数组)

我不确定,您在哪里定义了ObjectArray。但是,如果你将行var ObjectArray = {};放在上面,它就会起作用。 (如果您确定,该ID始终是一个数字,请改用var ObjectArray = [];

这是重新代码:

function newObject (name, age, eyeColour) {
    this.name = name;
    this.age = age;
    this.eyeColour = eyeColour;
    var id = *something calculated*
    this.id = id;
    var objectArray = {};   //or =[] for and Array
    objectArray[id] = this;    //This is the line in question.
}