Javascript: TypeError:... не является конструктором

У меня проблема с 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;
    }
}

дает следующую ошибку:

TypeError: album is not a constructor

Я не могу найти проблему. Я читал много других сообщений, но я не мог найти подобную проблему. Может ли быть запрещено создавать объект в другом объекте? Как я могу решить эту проблему?

Ответы

Ответ 1

Эта строка

var album = new album(albumName);

скрывает внешнюю функцию album. Так что да, album не является конструктором внутри функции. Точнее это undefined в этой точке.

Чтобы избежать такого рода проблем, я бы предложил называть ваши "классы", начиная с прописных букв:

function Album(name) {

В более общем плане я предлагаю следовать руководству по стилю Google, если вы сомневаетесь.