多重继承
多重继承实现是及其简单的,我们只需要用属性拷贝法的继承思路依次扩展对象。下面,我们创建一个multi()函数,它可以接受任意数量的输入性对象。然后,我们在其中实现了一个双重循环,内层循环用于拷贝属性,而外层循环则用于遍历函数参数中所传递进来的所有对象。
function multi(){ var n={},stuff,j=0,len=arguments.length; for(j=0;j<len;j++){ stuff=arguments[j]; for(var i in stuff){ n[i]=stuff[i] } } return n; }
现在来测试一下:首先,我们需要创建shape、twoDee以及一个匿名对象。然后调用multi()函数时将这三个对象传递给它,该函数会返回新建的triangle对象。
var shape={ name:'shape', toString:function(){return this.name} }; var twoDee={ name:'2D shape', dimensions:2 }; var triangle=multi(shape,twoDee,{ name:'Triangle', getArea:function(){return this.side*this.height/2;}, side:5, height:10 });
然后,让我们来看你它是否可以工作:
混合插入
混合插入并不是通过子对象的继承与扩展来完成的。也就是说,每当我们新建一个对象时,可以选择将其他对象的内容混合到我们新的对象中去,只要将它们全部传递给multi()函数,我们就可以在不建立相关继承关系树的情况下获得这些对象的功能。