JS继承

作者: 云飘雾散 | 来源:发表于2019-05-20 16:59 被阅读0次

    原型继承(JS中最常用的一种继承方式)

    • 子类B想要继承父类A中所有的属性和方法(私有+公有),只需要B.prototype = new A();即可
    • 原型继承的特点:它是把父类中私有的+公有的都继承了子类原型上(子类的公有的)
    • 核心:原型继承并不是把父类中的属性和方法克隆一份一模一样的给B,而是让B和A之间增加了原型链的连接,以后B的实例想要A中的getX方法,需要一级级的向上查找来使用
        function A() {
                this.a = 'aaa';
                this.b = function () {
                    console.log('bbb')
                }
            }
            A.prototype.c = 'ccc';
            A.prototype.d = function () {
                console.log('ddd')
            }
            function B() { }
            B.prototype = new A();
            console.log(new B());
    

    call继承

    • 把父类私有的属性和方法,克隆一份一模一样的作为子类私有的属性

         function A(){
             this.a = 'aaa';
             this.b = function(){
                 console.log('bbb');
             }
         }
         A.prototype.c = 'ccc';
         A.prototype.d = function(){
             console.log('ddd');
         }
         
         function B(){
             A.call(this);
         }
         console.log(new B())
      

    冒充对象继承

    • 把父类私有的+公有的克隆一份一模一样的给子类私有的
            function A(){
                this.a = 'aaa';
                this.b = function(){
                    console.log('bbb');
                }
            }
            A.prototype.c = 'ccc';
            A.prototype.d = function(){
                console.log('ddd');
            }
            function B(){
                let temp = new A();
                for(let attr in temp){
                    this[attr] = temp[attr];
                }
                temp = null;
            }      
            console.log(new B());
    

    混合模式继承

    • 原型继承+call继承
            function A(){
                this.a = 'aaa';
                this.b = function(){
                    console.log('bbb');
                }
            }
            A.prototype.c = 'ccc';
            A.prototype.d = function(){
                console.log('ddd');
            }
            function B(){
                A.call(this);
            }
            
            B.prototype = new A();
            B.prototype.constructor = B;
            console.log(new B());
    
    

    寄生组合式继承

          function A(){
                this.a = 'aaa';
                this.b = function(){
                    console.log('bbb');
                }
            }
            A.prototype.c = 'ccc';
            A.prototype.d = function(){
                console.log('ddd');
            }
            function B(){
                A.call(this);
            }
            B.prototype = Object.create(A.prototype);
            B.prototype.constructor = B;
            console.log(new B());
    

    相关文章

      网友评论

          本文标题:JS继承

          本文链接:https://www.haomeiwen.com/subject/igtlzqtx.html