web-dev-qa-db-ja.com

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

問題が見つかりません。私は他の多くの記事を読みましたが、同様の問題を見つけることができませんでした。別のオブジェクトにオブジェクトを作成することが許可されていない可能性がありますか?この問題を解決するにはどうすればよいですか?

15
user2089120

この行

var album = new album(albumName);

外部album関数をシャドウします。そのため、albumは関数内のコンストラクターではありません。より正確には、この時点ではundefinedです。

この種の問題を回避するには、大文字で始まる「クラス」の名前を付けることをお勧めします。

function Album(name) {

より一般的には、疑問がある場合は Googleスタイルガイド に従うことをお勧めします。

40
Denys Séguret