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, если вы сомневаетесь.