我想使用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的初学者,所以如果代码看起来有些奇怪,我很抱歉。
答案 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"};
此行正在创建一个新对象,该对象仅包含分配给字符串pers1
和pers2
的键"John"
和"Alice"
,您不能指定你创建的对象