web-dev-qa-db-fra.com

Javascript: TypeError: ... n'est pas un constructeur

J'ai un problème 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;
    }
}

donne l'erreur suivante:

TypeError: album is not a constructor

Je ne trouve pas le problème. J'ai lu beaucoup d'autres articles, mais je n'ai pas trouvé de problème similaire. Se pourrait-il qu'il ne soit pas autorisé de créer un objet dans un autre objet? Comment puis-je résoudre ce problème?

15
user2089120

Cette ligne

var album = new album(albumName);

masque la fonction externe album. Donc oui, album n'est pas un constructeur à l'intérieur de la fonction. Pour être plus précis, c'est undefined à ce stade.

Pour éviter ce genre de problème, je vous suggère de nommer vos "classes" en commençant par une majuscule:

function Album(name) {

Plus généralement, je suggère de suivre le guide de style Google en cas de doute.

40
Denys Séguret