未捕获类型错误:无法读取未定义的属性(读取“mano”)

问题描述 投票:0回答:1

我是这个社区的新人,当我用JS编写网站时,不小心出现了Uncaught type错误,我竭尽全力“对抗”这个错误,但什么也没发生,我紧急需要你的帮助:

编辑:哪一行会导致它?

Uncaught TypeError: Cannot read properties of undefined (reading 'mano')<br>
    at scambiaCarta (script.js:496:16)<br>
    at eseguiTurnoCPU (script.js:369:9)<br>
    at gestisciTurni (script.js:256:9)<br>
    at iniziaGioco (script.js:230:5)<br>
    at script.js:221:9
function creaGiocatore(nome) {
    return {
        nome: nome,
        vite: 3,
        mano: []
    };
}

function eseguiTurnoCPU() {
    const giocatoreCorrente = giocatori[turnoCorrente % giocatori.length];
    const giocatorePrecedente = giocatori[(turnoCorrente - 1 + giocatori.length)];

    if (deveScambiareCarta(giocatoreCorrente)) {
        scambiaCarta(giocatoreCorrente, giocatorePrecedente);
    } else {
        console.log(`${giocatoreCorrente.nome} decide di non scambiare la carta.`);
    }

    turnoCorrente = (turnoCorrente + 1) % giocatori.length;
    setTimeout(gestisciTurni, 2000);
}

function scambiaCarta(giocatore1, giocatore2) {
    if (deveBloccareScambioCarta(giocatore1.mano[0])) {
        console.log(`${giocatore1.nome} ha il Re in mano. Cucù.`);
        return;
    }

    const index1 = giocatori.indexOf(giocatore1);
    const index2 = giocatori.indexOf(giocatore2);


    const cartaScambiata = giocatore1.mano.splice(0, 1)[0];
    giocatore2.mano.push(cartaScambiata);


    const cartaScambiata2 = giocatore2.mano.splice(0, 1)[0];
    giocatore1.mano.push(cartaScambiata2);


    aggiornaCarte(giocatore1, index1);
    aggiornaCarte(giocatore2, index2);

    console.log(`${giocatore1.nome} ha scambiato una carta con ${giocatore2.nome}.`);
    mostraCarte();
}

function iniziaGioco() {
    console.log('Il gioco è iniziato!')
    inizializzaConsole();
    aggiornaConsoleVite();

    gestisciTurni();
    mostraCarte();
    aggiornaCarte();
}

function gestisciTurni() {
    const giocatoreCorrente = giocatori[turnoCorrente % giocatori.length];

    if (giocatoreCorrente.vite === 0) {
        turnoCorrente = (turnoCorrente + 1) % giocatori.length;
        setTimeout(() => {

            gestisciTurni();
        }, 2000);
        return;
    }
 
    if (turnoCorrente === 0) {
        mostraPulsantiUtente();
    } else {
        nascondiPulsantiUtente();
        eseguiTurnoCPU();
    }
    if (turnoCorrente === iMazziere) {
        eseguiTurnoMazziere();
    }
    turnoCorrente = (turnoCorrente + 1) % giocatori.length;
}
javascript typeerror undefined
1个回答
0
投票

mano
作为 function creaGiocatore 对象的一部分返回
。它不是 
creaGiocatore
的财产。为了能够使用它,您需要调用该函数,如下所示:
let result = creaGiocatore("some nome")
。然后你可以这样做:
result.mano[0] ...

这是一个例子:

function creaGiocatore(nome) {
    return {
        nome: nome,
        vite: 3,
        mano: [1,2,3]
    };
}

// You have to invoke the function to recieve its return value
let result = creaGiocatore("foo");

// Then you can use the return value
console.log(result.mano);

© www.soinside.com 2019 - 2024. All rights reserved.