Javascript 对象正在丢失此函数中的方法

Javascript 对象正在丢失此函数中的方法,javascript,methods,Javascript,Methods,首先,所有变量的名称都是意大利语,所以我希望这不是一个大问题。无论如何,我正在制作一个网络应用程序来记录我在学校所有科目的成绩,为此我想尝试使用对象。我创建了3个对象: -Voto(英语标记):只有一些变量,没有方法。 -Materiala(英语主题):有一些变量、一个“Voto”对象数组和一些方法,如aggiungiVoto(addMark)或ottieniMedia(getAverageMark) -Registro(学校注册):与Material类似,有一些变量、一些方法和一系列“Mate

首先,所有变量的名称都是意大利语,所以我希望这不是一个大问题。无论如何,我正在制作一个网络应用程序来记录我在学校所有科目的成绩,为此我想尝试使用对象。我创建了3个对象:
-Voto(英语标记):只有一些变量,没有方法。
-Materiala(英语主题):有一些变量、一个“Voto”对象数组和一些方法,如aggiungiVoto(addMark)或ottieniMedia(getAverageMark)
-Registro(学校注册):与Material类似,有一些变量、一些方法和一系列“Material”对象
问题是,在某些情况下,如果我调用一个对象的方法,它会说“函数未声明”,但它就在那里,如果我使用控制台创建一个与给出错误的对象相同的对象,我可以找到该方法,它可以工作。奇怪的是,所有的变量都存在,只有方法缺失。一个例子是这个函数,它应该获取一个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);
}
但我真的不知道如何解决这个问题,在谷歌上也找不到任何相关的东西

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));
};
var Voto=函数(Voto、tipo、data、commento、ignora){
this.voto=voto;
this.tipo=tipo;
这个数据=数据;
this.commento=commento;
如果(ignora==未定义){
this.ignora=false;
}
否则{
this.ignora=ignora;
}
};
var Materia=功能(nome){
this.nome=nome;
this.votiPresenti=0;
this.voti=新数组();
}
materiala.prototype.aggiungiVoto=函数(voto、tipo、数据、注释){
这个.votiPresenti++;
这个.voti.push(新的Voto(Voto,tipo,data,commento));
};
materiala.prototype.ottieniMedia=函数(){
if(this.votiPresenti==0)
返回“Vuoto”;
否则{
var-media=0;
对于(i=0;i
能否将问题缩小到出现错误的地方,并在此处发布特定代码?能否发布一些与
Materiala
功能及其原型相关的代码?演示如何声明方法。我添加了如何声明对象及其方法。嗯,我没有说任何错误。在哪里创建
注册表
对象?您是否有可能进行某种(反)序列化?您是否使用
JSON.parse/JSON.stringify
进行相关操作?就是这样!当我加载一个'Registro'对象时,我只是简单地执行了array.push(JSON.parse(string)),没有想到我没有创建一个对象'Materia',只是创建了一个与'Materia'对象具有相同属性的空对象。非常感谢你,我花了两天的时间考虑这个问题,但我甚至没有看到合适的地方
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));
};