我有一个对象构造函数,该对象构造函数设置了一些属性,后来使用它们来连接字符串以写入DOM。我看到这在某些情况下有效,但在其他情况下无效。
function Fighter(name, level, attackPts, defencePts, imgSource) {
// TRUNCATED PROPERTY ASSIGNMENTS AREA:
this.attackPts = attackPts;
this.defencePts = defencePts;
// DOM ELEMENT CONSTRUCTORS:
this.img = "style='background: #444 url(" + imgSource + ") no-repeat center'";
this.char_card_name = "<h3>" + this.name + "</h3>";
this.char_card_hitdef = "<h4>" + this.attackPts + "/" + this.defencePts + "</h4>";
this.char_card = "<div class='fighter " + faction + "' " + "id='" + this.name + "'>" + this.img + this.char_card_name + this.char_card_hitdef + "</div>";
稍后在游戏功能中,我为此“ Fighter”对象修改了attack
和defense
点,并且按预期方式工作,并且我的console.log()
测试验证了连接属性也更新。 。 。 。直到最后一个字符串将它们全部拉在一起并显示:
this.char_card = "<div class='fighter " + faction + "' " + "id='" + this.name + "'>" + this.img + this.char_card_name + this.char_card_hitdef + "</div>";
当我记录此属性时,即使它们在上一个属性this.char_card_hitdef
中成功更新,那些攻防编号也不会动摇
我在这里可以俯瞰什么?我在网上爬行,寻找范围或变量参考问题,但是我的日志语句使我回到了这个紧要关头。
答案 0 :(得分:0)
由于您仍在构造函数中,因此需要引用不带this.
的变量,这些变量是对象Fighter
的参数AND属性。
所以改变
this.char_card = "<div class='fighter " + faction + "' " + "id='" + this.name + "'>" + this.img + this.char_card_name + this.char_card_hitdef + "</div>";
到
this.char_card = "<div class='fighter " + faction + "' " + "id='" + name + "'>" + this.img + this.char_card_name + this.char_card_hitdef + "</div>"
以及所有其他引用其上方属性的属性。
您可以了解有关构造函数here
的更多信息