1、将歌曲管理的CURD方法放到原型中
2、在构造函数中,我们只有一个属性是songList,因为音乐库不是共有的,如果将songList放入原型中,任何一个人的一次修改songList,都将把songList改变,下一个人new出来的songList就会不一样
3、将CRUD方法放入原型中,好处很多,避免浪费命名污染,避免不必要内存浪费
4、注意当前对象的方法,在调用当前对象的其他方法需要使用this,这个this指代的是当前对象
<script> function SongManager(){ this.songList = null; } //在当前对象的方法中,调用当前对象的其他方法,需要使用this //例如 在 removeSong方法中调用 selectSong this.selectSong SongManager.prototype = { init:function (songList) { this.songList = songList; }, addSong: function (song){ this.songList.push(song); }, removeSong:function (songName){ var song = this.selectSong(songName); if(song == null){ throw "您要删除的歌曲不存在!请重新尝试"; } var index = this.songList.indexOf(song); this.songList.splice(index, 1); }, updateSong: function (songName, singer) { var song = this.selectSong(songName); if(song == null){ throw "您要修改的歌曲不存在!请重新尝试"; } song.singer = singer; }, selectSong: function (songName) { for (var k = 0; k < this.songList.length; k++) { var song = this.songList[k]; if(song.songName == songName){ return song; } } return null; } }; var pwbDEManager = new SongManager(); pwbDEManager.init([ { songName:"青藏高原", singer:"潘文斌" }, { songName:"我的换板鞋,摩擦摩擦最时尚", singer:"约翰逊,庞麦郎" } ]); pwbDEManager.addSong({ songName:"东风破", singer:"Jay Chou" }) var gjbDEManager = new SongManager(); gjbDEManager.init([ { songName:"两只老虎", singer:"高金彪" }, { songName:"粉刷匠", singer:"高金彪" } ]); // gjbDEManager.removeSong("李白"); gjbDEManager.removeSong("两只老虎"); console.log(pwbDEManager.songList); console.log(gjbDEManager.songList); </script>