<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>
设计模式知识连载(11)---继承_7:多继承
最新推荐文章于 2023-02-17 00:00:04 发布