class Folder {
constructor(name){
this.name = name;
this.files = [];
this.parent= null;//添加父类
}
add(file){
file.parent = this;//设置父对象
this.files.push(file)
}
scan(){
console.log('开始扫描文件夹:'+this.name)
for(var i = 0;i<this.files.length;i++){
this.files[i].scan()
}
}
remove(){
if(!this.parent){ //根节点或树外节点
return
}
for(var files = this.parent.files,l = files.length-1;l>=0;l--){ //删除当前节点
var file =files[l]
if(file===this){
files.splice(l,1)
}
}
}
}
class File {
constructor(name){
this.name = name
this.parent = null
}
add(){
throw new Error('文件下不可新增')
}
scan(){
console.log('开始扫描文件:'+this.name)
}
remove(){
if(!this.parent){
return
}
for(var files = this.parent.files,l = files.length-1;l>=0;l--){
var file =files[l]
if(file===this){
files.splice(l,1)
}
}
}
}
var folder = new Folder('学习资料');
var folder1 = new Folder('JavaScript');
var folder2 = new Folder('jquery')
var file1= new File('JavaScript设计模式与开发实践')
var file2 =new File('精通Jquery')
var file3= new File('重构与模式')
folder1.add(file1)
folder2.add(file2)
folder.add(folder1)
folder.add(folder2)
folder.add(file3)
var folder3 = new Folder('NodeJs')
var file4 = new File('深入浅出Nodejs')
folder3.add(file4)
var file5 = new File('JavaScript语言精髓与编程实践')
folder.add(folder3)
folder.add(file5)
folder1.remove()
folder.scan()
输出结果