ti-enxame.com

Javascript: TypeError: ... não é um construtor

Eu tenho um problema do TypeError:

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;
    }
}

dá o seguinte erro:

TypeError: album is not a constructor

Não consigo encontrar o problema. Li muitas outras postagens, mas não consegui encontrar um problema semelhante. Será que não é permitido criar um objeto em outro objeto? Como posso resolver este problema?

15
user2089120

Está linha

var album = new album(albumName);

sombreia a função externa album. Então sim, album não é um construtor dentro da função. Para ser mais preciso, é undefined neste momento.

Para evitar esse tipo de problema, sugiro nomear suas "classes" começando com maiúsculas:

function Album(name) {

Em geral, eu sugeriria seguir o guia de estilo do Google em caso de dúvida.

40
Denys Séguret