模仿一些底层框架的继承

在上面的文章中我们讲了原型继承,借用构造函数继承,混合继承,它们各自有自己的优缺点。下面我们自己来模仿一些一些框架的继承

//混合继承的 ,继承了父类两次模板,一次原型对象,
        //如果父类中有几百个属性。那么这种继承就不是很效率

        function inherit(ChildClass, SuperClass){
            //创建一个空函数,可以用来做装转           
            var F =new Function();      
            //实现空函数的原型对象和超类的原型对象进行转换
            F.prototype = SuperClass.prototype;
            //接着实现原型继承
            ChildClass.prototype = new F();
            //还原子类构造器
            ChildClass.prototype.constructor = ChildClass;
            //保存父类原型对象,方便解耦,方便获得父类原型对象
            ChildClass.Childsuperclass =  SuperClass.prototype;
            //判断父类原型对象的构造器

            if(SuperClass.prototype.constructor == Object.prototype.constructor){
                SuperClass.prototype.constructor = SuperClass;
            }

        }
        /*父类*/
        function Father(name ,age){
            this.name  = name ;
            this.age = age ;    
        }
        /*父类原型对象*/
        Father.prototype = {
            constructor:Father,
            say: function(){        
                alert('js')
            }       
        }
        /*子类*/
        function Son(name,age,job){
            //Father.call(this,name,age)//复制了一次模板
            Son.Childsuperclass.constructor.call(this,name,age)//看出解耦,不直接用Father.call或者Father.apply
            this.job = job;
        }

        //Son.prototype =   new Father(); //再次复制了一次模板.这种方式来继承还是有缺点,他又继承了父类的模板

        inherit(Son,Father);
        var lzr  = new Son('1111',22,'工作');
        alert(lzr.name)
        alert(lzr.age)
        alert(lzr.job)
        lzr.say();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1登峰造极

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值