模拟 extjs 底层继承

Posted linfang.zhou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟 extjs 底层继承相关的知识,希望对你有一定的参考价值。

1、混合继承的弊端

  混合继承在继承原型的时候,其实将 父类的模板 再次继承,影响效率

  

 // 混合继承
    function Person(name,age) {
        this.name = name;
        this.age = age;
    }
    Person.prototype = {
        constructor : Person,
        sayHello : function () {
            alert("hello");
        }
    }

    function Boy(name,age,sex) {
        //Person.call(this,name,age);
        this.sex = sex;
    }
    Boy.prototype = new Person();           //  虽然 在 new Person 的时候,并没有传入参数,但是 还是实例化了 Person 模板 , 只是参数的值默认为 undefined

    var b = new Boy("z3",25,"");
    alert(b.name);          // undefined
    alert(b.sex);           //

改进方法 

 // 改进方法 , 模拟 extjs 底层继承实现方式
    function Person(name,age) {
        this.name = name;
        this.age = age;
    }
    Person.prototype = {
        constructor : Person,
        sayHello : function () {
            alert("hello");
        }
    }

    function Boy(name,age,sex) {
        Boy.superClass.constructor.call(this,name,age);
        this.sex = sex;
    }

    function extend(sub,sup) {
        var F = new Function();
        F.prototype = sup.prototype;
        sub.prototype = new F();
        sub.prototype.constructor = sub;
        sub.superClass = sup.prototype;
        if(sup.prototype.constructor = Object.prototype.constructor){
            sup.prototype.constructor = sup;
        }
    }
    extend(Boy,Person);
    var b = new Boy("z3",25,"");
    alert(b.name);              // z3

 

以上是关于模拟 extjs 底层继承的主要内容,如果未能解决你的问题,请参考以下文章

无废话ExtJs 入门教程二十一[继承:Extend]

ExtJs006类别名备用名

extjs常用技巧

Extjs类单一与多态继承

从 extjs 工具提示中删除箭头,

信步漫谈之ExtJs—基础介绍