2013-02-21 35 views
15

Tôi có một vấn đề Lỗi Loại:Javascript: Lỗi Loại: ... không phải là một constructor

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; 
    } 
} 

cung cấp cho các lỗi sau:

TypeError: album is not a constructor

tôi không thể tìm ra vấn đề. Tôi đọc rất nhiều bài viết khác, nhưng tôi không thể tìm thấy một vấn đề tương tự. Có thể nào nó không được phép tạo một đối tượng trong một đối tượng khác? Làm thế nào tôi có thể giải quyết vấn đề này?

Trả lời

40

Dòng này

var album = new album(albumName); 

bóng bên ngoài album chức năng. Vì vậy, có, album không phải là một hàm tạo bên trong hàm. Để chính xác hơn, nó là undefined tại thời điểm này.

Để tránh những loại vấn đề, tôi muốn đề nghị đặt tên "lớp" của bạn bắt đầu với một chữ hoa:

function Album(name) { 

Tổng quát hơn tôi muốn đề nghị làm theo the Google style guide khi nghi ngờ.

+10

Tương đương với 'var anbom; album = album mới (tên album); Điều đó sẽ làm cho nó rõ ràng hơn. –

+0

@Felix Kling: Cảm ơn sự giúp đỡ của bạn! Tôi đã viết "var album; album = new Album (albumName);" => nhưng không thành công – user2089120

+1

@ user2089120 Xem http://jsbin.com/uhapel/1/edit (mở bảng điều khiển) –

Các vấn đề liên quan