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());
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 继承6种套餐 参照红皮书,JS继承一共6种 1.原型链继承 核心思想:子类的原型指向父类的一个实例 Son.pro...
    灯不梨喵阅读 8,343评论 1 2
  • 继承的概念:子类可以使用父类共享的属性和方法,避免重复代码提高代码复用性。 原型链:子类可以共享父类的实例对象和实...
    浅秋_6672阅读 3,034评论 0 0
  • 1. 原型继承(最常用) 让子类继承父类的方法:让子类的原型等于父类的实例 子.peototype=new 父 A...
    Mr无愧于心阅读 2,682评论 0 1
  • 一.构造继承 构造函数继承: function Super(){ this.colors= ['c','a','b...
    yuanjiex阅读 1,501评论 0 1
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,378评论 2 17