未定义的TypeError未定义(长度和值属性)

时间:2016-05-20 13:31:31

标签: javascript

我继续我的Hangman游戏,我完成了代码。

但是我遇到了新的2个错误:

  

ahorcado.js:146 Uncaught TypeError:无法读取未定义的属性“length”   ahorcado.js:118未捕获的TypeError:无法读取未定义的属性'value'

var palabra = "Perro"
var hombre,l, espacio;

var Ahorcado = function (con) {
    this.contexto = con;
    this.maximo = 5;
    this.intentos = 0;
    this.vivo = true;

    this.dibujar();
}

Ahorcado.prototype.dibujar = function () {

    var dibujo = this.contexto;

    dibujo.beginPath();
    dibujo.moveTo(150,100);
    dibujo.lineTo(150,50);
    dibujo.lineTo(400,50);
    dibujo.lineTo(400,350);
    dibujo.lineWidth = 15;
    dibujo.strokeStyle = '#000'
    dibujo.stroke();
    dibujo.closePath();

    if (this.intentos > 0) {
        dibujo.beginPath();
        dibujo.arc(150, 140, 40, 0, Math.PI * 2, false);
        dibujo.strokeStyle = '#f00'
        dibujo.lineWidth = 5;
        dibujo.stroke();
        dibujo.closePath();

        if (this.intentos > 1) {
            dibujo.beginPath();
            dibujo.moveTo(150,180);
            dibujo.lineTo(150,250);
            dibujo.strokeStyle = '#f00'
            dibujo.lineWidth = 5;
            dibujo.stroke();
            dibujo.closePath();

            if (this.intentos > 2) {
                dibujo.beginPath();
                dibujo.moveTo(120,220);
                dibujo.lineTo(150,180);
                dibujo.lineTo(180,220);
                dibujo.strokeStyle = '#f00'
                dibujo.lineWidth = 5;
                dibujo.stroke();
                dibujo.closePath();

                if (this.intentos > 3) {
                    dibujo.beginPath();
                    dibujo.moveTo(120,290);
                    dibujo.lineTo(150,250);
                    dibujo.lineTo(180,290);
                    dibujo.strokeStyle = '#f00'
                    dibujo.lineWidth = 5;
                    dibujo.stroke();
                    dibujo.closePath();

                    if (this.intentos > 4) {

                        dibujo.beginPath();
                        dibujo.moveTo(125,120);
                        dibujo.lineTo(145,145);
                        dibujo.moveTo(145,120);
                        dibujo.lineTo(125,145);

                        dibujo.moveTo(155,120);
                        dibujo.lineTo(175,145);
                        dibujo.moveTo(175,120);
                        dibujo.lineTo(155,145);

                        dibujo.strokeStyle = 'blue';
                        dibujo.linewidth = 5;
                        dibujo.stroke();
                        dibujo.closePath();
                    }   
                }
            }
        }
    }
}

Ahorcado.prototype.trazar = function () {
    this.intentos++;
    if (this.intentos >= this.maximo) {
        this.vivo = false;
        alert('Estas muerto')
    }
    this.dibujar();
}



function iniciar() {
    var l = document.getElementById('letra');
    var b = document.getElementById('boton');
    var canvas = document.getElementById('c');
    canvas.width = 500;
    canvas.height = 400;
    var contexto = canvas.getContext('2d');
    hombre = new Ahorcado(contexto); 

    espacio = new Array(palabra.length);

    b.addEventListener('click', agregarLetra)


    mostrarPista(espacio);

}

function agregarLetra() {
    var letra = l.value
    var p;
    mostrarPalabra(palabra, hombre, letra);
    for(p in palabra){
        if (letra == palabra[p]) {
            espacio[p] = letra;
            encontrado = true;
        }
    }

    mostrarPista(espacio);

    if (!encontrado) {
        ahorcado.trazar
    }
}

function mostrarPalabra(palabra, ahorcado, letra) {
    var encontrado = false;
    letra = letra.toUppercase();


}

function mostrarPista(palabra, espacio) {
    var pista = document.getElementById('pista');
    var texto = '';
    var i = 0;
    var largo = espacio.length;

    for (i = 0; i < largo; i++) {
        if (espacio[i] != undefined) {
            texto = texto + espacio[i] + '';
        }
        else{
            texto += '_ '
        }
    }

    pista.innerText = texto;
}

3 个答案:

答案 0 :(得分:0)

好吧,变量espacio 未定义,正如错误消息所示,因为您从未调用iniciar,这会初始化它。

答案 1 :(得分:0)

第118行,var letra = l.value - lundefined
第146行:var largo = espacio.length; - espacioundefined

试着找出这些变量的来源以及为什么它们是undefined,如果代码是另一种语言,我们就无法解决你的问题。
快乐的编码!

答案 2 :(得分:0)

您的事件处理程序'agregarLetra'不知道'l'(btw错误的变量名称,因为它没有解释该变量的用途)。 所以而不是:

var letra = l.value

尝试:

l = document.getElementById('letra').value;

或者在你的'iniciar'函数中写一下:

l = document.getElementById('letra');

而不是:

var l = document.getElementById('letra');

'var l'仅将节点保存到新的局部变量 这应该解决l。 118。

来自l的错误。 146是由于您在调用'mostrarPista'时忘记传递'palabra'参数。您的函数定义了2个参数:

function mostrarPista(palabra, espacio) {

但仅使用一个参数(l.128)调用:

mostrarPista(espacio);