Javascript:TypeError:...不是构造函数

Posted

技术标签:

【中文标题】Javascript:TypeError:...不是构造函数【英文标题】:Javascript: TypeError: ... is not a constructor 【发布时间】:2013-02-07 03:54:12 【问题描述】:

我有一个 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) 

一般来说,如果有疑问,我建议您关注the Google style guide。

【讨论】:

相当于var album; album = new album(albumName);。这应该让它更明显。 @Felix Kling:也感谢您的帮助!我写了“var专辑;专辑=新专辑(专辑名称);” => 但没有成功 感谢帮助我摆脱束缚。很好的解释@dystroy。

以上是关于Javascript:TypeError:...不是构造函数的主要内容,如果未能解决你的问题,请参考以下文章

Javascript Uncaught TypeError:AccountID不是一个函数

Javascript 中的数组错误:未捕获的 TypeError:无法读取未定义的属性“x”

Javascript:TypeError:...不是构造函数

如何修复'TypeError:无法读取 Javascript 中未定义的属性'标题'

TypeError:“参考”对象在 javascript 中不可迭代

Javascript/ExtJS:Ext.getCmp('') 导致 TypeError ...不是函数