从关联数组启动对象
Initiate objects from associative array
我想使用 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 初学者,如果代码看起来有点奇怪,我很抱歉。
Why can I call the .name attribute but not the .init() method?
在JavaScript中,您可以访问对象上不存在的属性;当你这样做时,你会得到值 undefined.
这就是你正在做的:personArray
(不是数组)上的属性值是字符串,并且没有 name
或 init
属性。这对于访问 .name
没问题,因为您所做的只是将它传递给 console.log
,但是对于 .init
会出现错误,因为您试图将 undefined
作为函数调用.
主要问题是您在对象(它不是数组)中的属性与您的 person
函数没有任何关系,也与您的 pers1
没有任何关系和 pers2
个对象。
如果您的目标是从一个属性值只是名称的对象开始,然后使用 person
对象,你可以这样做:
var person = {name: null, id: null};
person.init = function(name){
this.name = name;
this.id = "##" + this.name;
};
var personMap = {pers1: "John", pers2: "Alice"};
var name;
for (var i in personMap) {
name = personMap[i];
personMap[i] = Object.create(person);
personMap[i].init(name);
}
var personArray = {pers1: "John", pers2: "Alice"};
此行正在创建一个新对象,它只包含分配给字符串 "John"
和 "Alice"
的键 pers1
和 pers2
,您没有分配您创建的对象
我想使用 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 初学者,如果代码看起来有点奇怪,我很抱歉。
Why can I call the .name attribute but not the .init() method?
在JavaScript中,您可以访问对象上不存在的属性;当你这样做时,你会得到值 undefined.
这就是你正在做的:personArray
(不是数组)上的属性值是字符串,并且没有 name
或 init
属性。这对于访问 .name
没问题,因为您所做的只是将它传递给 console.log
,但是对于 .init
会出现错误,因为您试图将 undefined
作为函数调用.
主要问题是您在对象(它不是数组)中的属性与您的 person
函数没有任何关系,也与您的 pers1
没有任何关系和 pers2
个对象。
如果您的目标是从一个属性值只是名称的对象开始,然后使用 person
对象,你可以这样做:
var person = {name: null, id: null};
person.init = function(name){
this.name = name;
this.id = "##" + this.name;
};
var personMap = {pers1: "John", pers2: "Alice"};
var name;
for (var i in personMap) {
name = personMap[i];
personMap[i] = Object.create(person);
personMap[i].init(name);
}
var personArray = {pers1: "John", pers2: "Alice"};
此行正在创建一个新对象,它只包含分配给字符串 "John"
和 "Alice"
的键 pers1
和 pers2
,您没有分配您创建的对象