这是我的问题,我有以下StatCharac对象:
function StatCharac (initVal) {
this.initVal = initVal;
this.val = initVal;
this.modifs = [];
this.getVal = function() {
var stat = this.val;
for (var i =0; i < this.modifs.length; i++) {
stat = this.modifs[i](stat);
}
return stat;
}
}
当我尝试访问getVal方法时,控制台说这个方法是未定义的。我已经在另一个对象中以相同的方式定义了一个方法,一切都很好。我也试图使用StatCharac的prototype属性,但它既不起作用......
怎么了?
编辑: 当我说访问getVal就是这样:
console.log('message : ' + character.hp.getVal);
我尝试为其他方法执行此操作,如果方法被识别,则其代码应显示在消息中。
这是我使用StatCharac的地方:
function Character (nameCharac, id, hp, spell, owner) {
this.nameCharac = nameCharac;
this.id = id;
this.hp = new StatCharac(hp);
this.power = new StatCharac(0);
this.spell = spell;
this.pos = -1;
this.canMove = false;
this.canPlay = false;
this.owner = owner;
}
当我尝试调用getVal()时出现以下错误:
'socket'上缺少错误处理程序。 TypeError:Object#没有方法'getVal' 在Socket。 (布拉布拉\ app.js:237:55) ...
最终编辑:好的,我发现了问题所在。实际上,我从这个数组中复制我的角色:
var dbCharacters = [];
for (var i = 0; i < 44; i ++) {
dbCharacters[i] = new Character('PersoYolo'+(i+1), i, 100, null);
}
为了克隆字符(而不仅仅是获取引用),我使用了这个函数:
function clone (o) {
return JSON.parse(JSON.stringify(o));
}
但是在测试之后,似乎这个函数只克隆了对象o的属性,而不是它的方法。所以现在我必须找到如何在JS中克隆整个对象。
答案 0 :(得分:0)
举个例子:
function StatCharac (initVal) {
this.initVal = initVal;
this.val = initVal;
this.modifs = [];
this.getVal = function() {
var stat = this.val;
for (var i =0; i < this.modifs.length; i++) {
stat = this.modifs[i](stat);
}
return stat;
}
}
并将其称为例如:
var obj = new StatCharac(23)
console.log(obj.getVal())
答案 1 :(得分:0)
function StatCharac (initVal) {
this.initVal = initVal;
this.val = initVal;
this.modifs = [];
this.getVal = function() {
var stat = this.val;
for (var i =0; i < this.modifs.length; i++) {
stat = this.modifs[i](stat);
}
return stat;
}
}
function Character (nameCharac, id, hp, spell, owner) {
this.nameCharac = nameCharac;
this.id = id;
this.hp = new StatCharac(hp);
this.power = new StatCharac(0);
this.spell = spell;
this.pos = -1;
this.canMove = false;
this.canPlay = false;
this.owner = owner;
}
var character = new Character()
console.log(character.hp.getVal)
这很好。
答案 2 :(得分:0)
console.log('message: ' + {name: 'character object', hp: new StatCharac(1)}.hp.getVal)
工作正常。