JavaScript:TypeError:...不是一个构造函数。

17

我遇到了一个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不是一个构造函数

我找不到问题所在。我阅读了许多其他帖子,但我找不到类似的问题。可能不能在另一个对象中创建对象吗?我该如何解决这个问题?

1个回答

42

这行

var album = new album(albumName);

这里的意思是,该函数中的album是外部函数的一个别名。因此,album不是该函数内的构造函数。更准确地说,在此时它是undefined

为了避免这种问题,建议以大写字母开头命名您的“类”:

function Album(name) {

更普遍地说,我建议在疑惑时遵循Google风格指南

11
相当于 var album; album = new album(albumName);。这样应该更明显了。 - Felix Kling
@Felix Kling:感谢您的帮助!我写了“var album; album = new Album(albumName);”,但没有成功。 - user2089120
谢谢,这帮了我摆脱困境。@dystroy 的解释很好。 - iiminov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接