设计模式知识连载(11)---继承_7:多继承
2017-12-13 11:29
381 查看
<body> <h3>设计模式知识连载(11)---继承_7:多继承</h3> <p> JavaScript中的继承是依赖于原型prototype链实现的, 但是只有一条原型链,所以理论上是不能继承多个父类的。 然而可以通过一些技巧方法来实现类似的多继承 </p> <script type="text/javascript"> // 这里的extend方法的实现就是对对象中的属性的一个复制过程,JQ里的extend方法是深层复制 /** * 单继承 属性复制 */ var extend = function (target, source) { //遍历源对象中的属性 for(var property in source) { // 将源对象中的属性复制到目标对象中 target[property] = source[property] ; } ; // 返回目标对象 return target ; } ; var book = { name : 'JavaScript设计模式', alikeBooks : ['html', 'css', 'js'] } ; var anotherBook = { color : 'blue' } ; console.log('继承后的数据----------') ; extend(anotherBook, book) ; console.log(anotherBook) ; console.log(anotherBook.name) ; console.log(anotherBook.alikeBooks) ; console.log('修改后的数据----------') ; anotherBook.alikeBooks.push('java') ; anotherBook.name = '设计模式' ; console.log(anotherBook) ; console.log(anotherBook.name) ; console.log(anotherBook.alikeBooks) ; /** * 多继承 属性复制 */ var mix = function() { // 从第二个参数起为被继承的对象 var i = 1 ; // 获取参数长度 var len = arguments.length ; // 第一个对象为目标对象 var target = arguments[0] ; // 缓存参数对象 var arg ; // 遍历被继承的对象 for(; i < len; i++) { // 缓存当前对象 arg = arguments[i] ; // 遍历被继承对象中的属性 for(var property in arg) { // 将被继承对象中的属性复制到目标对象中 target[property] = arg[property] ; } } ; // 返回目标对象 return target ; } ; // 可以把这个方法绑定到原生对象Object上,这样所有的对象就可以拥有这个方法。 Object.prototype.mix = function() { var i = 1 ; var len = arguments.length ; var arg ; for(; i < len; i++) { arg = arguments[i] ; for(var property in arg) { this[property] = arg[property] ; } } ; } var book1 = {} ; var book2 = { name : 'JavaScript设计模式', alikeBooks : ['html', 'css', 'js'] } ; var book3 = { color : 'blue', author : '小白' } ; book1.mix(book1, book2, book3) ; console.log('book1:', book1) ; </script> </body>
相关文章推荐
- 设计模式知识连载(9)---继承_5:如虎添翼-寄生式继承
- 设计模式知识连载(10)---继承_6:终极继承者-寄生组合式继承
- 设计模式知识连载(5)---继承_1:子类的原型对象-类式继承
- 设计模式知识连载(7)---继承_3:优点结合-组合继承
- 设计模式知识连载(6)---继承_2:创建即继承-构造函数继承
- 设计模式知识连载(34)---备忘录模式:
- 设计模式知识连载(1)---函数的书写方式
- 设计模式知识连载(45)---同步模块模式:
- 设计模式知识连载(47)---Widget模式:
- 设计模式知识连载(35)---迭代器模式:
- 设计模式知识连载(21)---代理模式:
- 设计模式知识连载(48)---MVC模式:
- 设计模式知识连载(31)---命令模式:
- 设计模式知识连载(15)---抽象工厂模式:
- 数据库模型设计连载之(继承模式 )
- 设计模式知识连载(27)---观察者模式:
- 设计模式知识连载(40)---节流模式:
- 设计模式知识连载(3)---封装_2:闭包
- 设计模式知识连载(14)---工厂方法模式:
- 设计模式知识连载(44)---等待者模式: