设计模式知识连载(11)---继承_7:多继承

<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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值