javascript对象中的未定义方法

时间:2015-04-04 15:18:58

标签: javascript

这是我的问题,我有以下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中克隆整个对象。

3 个答案:

答案 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)

工作正常。