您的位置:首页 > Web前端 > JavaScript

设计模式知识连载(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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息