从关联数组中启动对象

时间:2015-03-10 11:25:07

标签: javascript arrays object initialization

我想使用init()方法通过for..in循环启动从关联数组中获取的对象:

var person = {name: null, id: null}

person.init = function(name){
    this.name = name;
    this.id = "##" + this.name;
}

var pers1 = Object.create(person);
var pers2 = Object.create(person);

var personArray = {pers1: "John", pers2: "Alice"};

for (var i in personArray){
    console.log(i);
    console.log(personArray[i]);
    console.log(i.name);
    i.init(personArray[i]);
}

输出:

pers1
John       
undefined  // pers1.name
TypeError: i.init is not a function  //But not pers1.init() ?

为什么我可以调用.name属性而不调用.init()方法? 更重要的是,有没有办法在数组中调用对象的方法?

我是JS的初学者,所以如果代码看起来有些奇怪,我很抱歉。

2 个答案:

答案 0 :(得分:1)

  

为什么我可以调用.name属性而不调用.init()方法?

在JavaScript中,您可以访问对象上不存在的属性;当你这样做时,你会得到值undefined.这就是你正在做的事情:personArray(不是数组)上的属性值是字符串,没有{{ 1}}或name属性。这对于访问init很好,因为您只需将其传递给.name,但console.log会收到错误,因为您尝试将.init作为函数调用

主要问题是,您在对象中的属性(不是数组)与您的undefined函数无关,并且与您的person和{无任何关联{1}}对象。

如果您的目标是从一个对象开始,该对象的属性值只是名称,并将其转换为对象使用这些由pers1对象支持的名称的对象,则可以这样做:

pers2

答案 1 :(得分:0)

var personArray = {pers1: "John", pers2: "Alice"};

此行正在创建一个新对象,该对象仅包含分配给字符串pers1pers2的键"John""Alice",您不能指定你创建的对象