引用父对象-算法分析与设计---micheal t.goodrich roberto tamassia
10.9引用父对象在11.7节提到的例子中,组合对象保存了它下面的子节点的引用,这是组合模式的特点,此时树结构是从上至下的。但有时候我们需要在子节点上保持对父节点的引用,比如在组合模式中使用职责链时,有可能需要让请求从子节点往父节点上冒泡传递。还有当我们删除某个文件的时候,实际上是从这个文件所在的上层文件夹中删除该文件的。现在来改写扫描文件夹的代码,使得在扫描整个文件夹之前,我们可以先移除某一个具体的文件。首先改写Folder类和File类,在这两个类的构造函数中,增加this.parent属性,并且在调用add方法的时候,正确设置文件或者文件夹的父节点: var Folder = function( name ){ this.name = name; this.parent = null; //增加this.parent属性this.files = []; }; Folder.prototype.add = function( file ){ file.parent = this; //设置父对象this.files.push( file ); }; Folder.prototype.scan = function(){ console.log( '开始扫描文件夹: ' + this.name ); for ( var i = 0, files = this.files; file = files[ i++ ]; ){ file.scan(); } };接下来增加Folder.prototype.remove方法,表示移除该文件夹:图灵社区会员轩辕专享尊重版权
8.11MB
文件大小:
评论区