JS继承

原型继承(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继承)