Tengo un TypeError problema:

function artist(name) {
    this.name = name;
    this.albums = new Array();

    this.addAlbum = function(albumName) {
        for (var i = 0; i < this.albums.length; i++) {
            if (this.albums[i].name == albumName) {
                return this.albums[i];
            }
        }

        var album = new album(albumName);
        this.albums.push(album);

        return album;
    }
}

function album(name) {
    this.name = name;
    this.songs = new Array();
    this.picture = null;

    this.addSong = function(songName, track) {
        var newSong = new songName(songName, track);
        this.songs.push(newSong);

        return newSong;
    }
}

da el siguiente error:

TypeError: album is not a constructor

No puedo encontrar el problema. He leído un montón de otros posts, pero no pude encontrar un problema similar. Podría ser que no está permitido crear un objeto de otro objeto? Cómo puedo resolver este problema?

OriginalEl autor user2089120 | 2013-02-21

1 Comentario

  1. 40

    Esta línea

    var album = new album(albumName);

    sombras externo album función. Así que sí, album no es un constructor dentro de la función. Para ser más precisos es undefined en este punto.

    Para evitar este tipo de problema, me gustaría sugerir el nombre de tu “clases” que empieza con una mayúscula :

    function Album(name) {

    Más general, te sugiero seguir el Google de la guía de estilo en caso de duda.

    Es equivalente a var album; album = new album(albumName);. Que debería hacer más evidente.
    Kling: Gracias también por tu ayuda! Escribí “var álbum; album = nuevo Álbum(albumName);” => pero sin éxito
    Consulte jsbin.com/uhapel/1/edit (abrir la consola)
    Gracias que me ayudó a salir de bind. Bonita explicación @dystroy.

    OriginalEl autor Denys Séguret

Dejar respuesta

Please enter your comment!
Please enter your name here