对象在此函数中丢失了它们的方法

时间:2015-08-28 11:31:52

标签: javascript methods

首先,所有变量名都是意大利语,所以我希望这不是一个大问题。无论如何,我正在制作一个网络应用程序来跟踪我在学校所有科目的所有分数,为此,我想尝试使用对象。我创建了3个对象:
-Voto(英文标记):只有一些变量,没有方法 -Materia(英文):有一些变量,一组'Voto'对象和一些方法,如aggiungiVoto(addMark)或ottieniMedia(getAverageMark)
-Registro(学校注册):与Materia类似,有一些变量,一些方法和一系列'Materia'对象
问题是,在某些情况下,如果我调用一个对象的方法,它说'函数未声明'但它就在那里,如果我使用控制台创建一个相同的对象给出错误的那个我可以找到方法和它作品。奇怪的是,所有的变量都存在,只有方法缺失。一个例子是这个函数,它应该使用一个Registro对象并创建一些表示所有主题的HTML元素,这些元素应该显示每个主题名称及其平均标记。

function MostraRegistro(reg) {
// I create all HTML object in a DIV with id main
var toAppend = "";
main = "#main";
$(main).html("");
for (i = 0; i < reg.materie.length; i++) {
    toAppend = "";
    toAppend += "<div id='DisplayDiv_" + reg.materie[i].nome + "' >";
    toAppend += "<div class='materia' onclick='MostraMateria(" + i + ");'>";
// The line where it gives the error, where I call ottieniMedia()
    toAppend += "<text class='TestoMaterie'>" + reg.materie[i].nome + "  Media:" + String(reg.materie[i].ottieniMedia()) + "</text'></div>";

    toAppend += "<div class='materiaPlus' onclick='Menu_AggiungiVoto(" + String(i) + ");' >AGGIUNGI VOTO</div>";
    toAppend += "</div>";
    $(main).append(toAppend);
}

}

我注意到的一点是,如果我创建一个对象'Materia'但我没有将它分配给变量它没有我的方法,我想这是我的问题,因为当我添加一个新的主题/学校注册我只是做

materie.push(new Materia(subjectname) );

但我真的不知道如何解决这个问题,我在谷歌上找不到任何相关内容

var Voto = function (voto, tipo, data, commento,ignora) {
    this.voto = voto;
    this.tipo = tipo;
    this.data = data;
    this.commento = commento;
    if (ignora === undefined) {
        this.ignora = false;
    }
    else {
        this.ignora = ignora;
    }
};
var Materia = function (nome) {
    this.nome = nome;
    this.votiPresenti = 0;
    this.voti = new Array();
}
Materia.prototype.aggiungiVoto = function (voto, tipo, data, commento) {
this.votiPresenti++;
this.voti.push(new Voto(voto, tipo, data, commento));
};
Materia.prototype.ottieniMedia = function () {
    if (this.votiPresenti == 0)
        return "Vuoto";
    else {
        var media = 0;
        for (i = 0; i < this.votiPresenti; i++) {
            if (!this.voti[i].ignora) {
                media += parseFloat(this.voti[i].voto);
            }
        }
        return (media / this.votiPresenti);
    }
};
var Registro = function(nome,annoRegistro){
    this.materie = new Array();
    this.materiePresenti = 0;
    this.annoRegistro = annoRegistro;
    this.nome = nome;
};
Registro.prototype.aggiungiMateria = function(nome){
    this.materiePresenti++;
    this.materie.push(new Materia(nome));
};

0 个答案:

没有答案