ES6:extends 和 super结合使用

ES6:extends 和 super结合使用

   使用场景:子级需要计算自己独有的函数计算,同时也需要调用父级中的一个操作函数

    class Father{

      constructor(x,y){

         this.x = x;

         this.y = y;

      }

      sum(){

        console.log(this,x+thisy);

      }

   }

   class Son extends Father{

     constructor(x,y){

        super(x,y);

        this.x= x;

        this,y=y;

     }

     subtract(){

       console.log(this.x-this.y); 

     }  

   }

  var son  =  new Son(5,2);

  son.subtract();

  son.sum();

  目的:子级自己操作本体内的函数subTract()【减法】,同时也要继承父级中的函数sum【加法】,

  注释:首先使用class函数进行声明一个父级类 Father,里面有两个函数,一个是构造函数constructor,一个是普通法函数sum,在父级Father中constructor的this指向的是父级Father的constructor,然后子级需要进行调用父级Father的sum函数方法,就需要用到继承,所以就会有class Son extends Father ,因为我们需要进行本体subTract函数,在里面运用到x,y,所以我们需要在进行本体的数据进行声明,(因为this的指向不同,需要重新声明),就会有自己的constructor中进行赋值,这里赋值之后的this指向都是子级Son的,所以我们这里的声明跟父级Father中的constructor是没有任何关系的,但是当我们使用super函数的时候,就可以调用父级Father中的constructor了,从而可以使用父级Father中的sum函数,同时我们需要进行数据的创建和实例化,所以需要在底部进行数据的创建,故有 var son =  new Son(5.2); ,但是需要注意的是,使用super函数我们需要放在子级Son的构造函数的最顶部,因为数据的指向不同,放在其他的地方数据会出现错误(会报错),最后我们就可以调用本体的subTract函数 son.subTract()和父级的sum函数 则为son.sum(),

 提示:在new Son (5.2)的时候,我们加入了实参,在传递实参的时候我们首先会传递给本体子级Son,代替本体的constructor中的x和y,但是我们又想操作父级Father中的sum函数,因为this的指向不同,我们需要把实参在传递给子级Son本体,就需要使用到super(x,y),也就是super(5,2)中的5和2在传递给父级Father中constructor中的x和y,这时候父级Father中的constructor就是constructor(5,2),然后带入sum中就可以得到结果即为this.x = 5,this.y=2;结果为7,因为本体的this的指向是本体子级Son,所以这时候子级Son本体中的数据this.x = 5,this.y = 2 ,带入到subTract中就是this.x- this.y 则为 5 - 2 。结果是3 。所以调用son.subTract的结果就是3 。son.sum的结果就是7

posted @ 2022-02-23 18:36  一封未寄出的信  阅读(92)  评论(0编辑  收藏  举报