es6-class 舔狗的四年

9,679 阅读4分钟

人生若只如初见

每个人都有过去,但那也只是过去……

         13年暑假,为了帮家里减少点负担我去工地当小工,帮抹灰的师傅们提灰,毕竟家里农村的,父母说大学每个月给我1000的生活费,虽然不是很多,但对我来说已经很满足了。
         两个月后,我满怀期待的大学生活终于来了,其实那年高考并不理想,读了一个普通本科,心有不甘的来到大学,心里暗想,我要发奋图强努力学习,应该有人和我有相同想法吧,后来发现那也只是想想……报道的第一天,班上同学轮流做自我介绍,轮到我的时候,我只记得我当时很紧张,心跳的飞快,站在讲台的时候我结巴介绍完自己,还好讲台遮住了我那不听使唤的左腿,当时的我不善表达,有严重的社恐,加上农村出身的自卑感。
         我其实很普通,没有人会把注意力刻意的放在普通的人的身上,轮到她自我介绍时,看到她的那一刻,第一次体会到了心动的感觉,兄弟们你们还能想起你第一次遇到喜欢的人的那种感觉吗?班上活跃的男生开始吹起了口哨,我目不转睛的盯着她,我将他的名字,来自哪里等等都牢牢的记在心里,现在我的脑海中依然能一帧一帧的播放那天的场景,她来自一个大城市的女孩,身高大约165左右,洋气,自信,漂亮.....
         晚上宿舍,隔壁宿舍都在讨论她,而我只能默默的听他们讨论,我知道我从头到脚都配不上,她是白天鹅,而我就一癞蛤蟆,但癞蛤蟆是想吃天鹅肉的,兄弟们能体会到我那时心情吗?当然,十几年以来的第一次心动不会就这么草草收场……

后面我会继续讲述我的 爱而不得 卑微的爱 。陌生的人,请给我一只兰州

构造函数

LickDog 是构造函数 ding是LickDog的实例,
ding.proto===LickDog.prototype

    function LickDog(name, lick) {
      this.name = name;
      this.like = lick;
    }
    LickDog.prototype.love = function () {
      return this.like;
    };
    const ding = new LickDog("舔狗", "班花");

image.png

class

es6 中class 可以看做是构造函数的语法糖 ,底层还是构造函数
class LickDog {
      constructor(name, lick) {
        this.name = name;
        this.like = lick;
      }
      love() {
        return this.like;
      }
    }
  const ding = new LickDog("舔狗", "班花");

image.png

其中 constructor 方法是类的构造函数,是一个默认方法,通过 new 命令创建对象实例时,自动调用该方法。
constructor和love方法一样都是挂载到了LickDog.prototype。
此时ding.constructor===LickDog LickDog.prototype.constructor = LickDog

接下来看看class的静态方法和静态属性 及里面的this

class LickDog {
      constructor(name, lick) {
        console.log(this);
        this.name = name;
        this.like = lick;
      }
        
      static love() {
        return this.like;
      }
    }
    const ding = new LickDog("舔狗", "班花");

image.png

舔狗们,明显能看出 LickDog.constructor里面有like方法 ,回想下LickDog.prototype.constructor = LickDog 说明like挂到了LickDog 而不是LickDog.prototype。
如果你想访问love 方法通过 LickDog.love() ,实例ding是无法访问到的love
静态方法love中里面的this是指向的是 LickDog 而constructor中的this指向的是ding

继承

 class LickDog {
     static love() {
       return "班花";
     }
   }
 class LickDog1 extends LickDog {}

image.png

静态方法是可以被继承的 ,但只能被子类去访问
静态方法和静态属性类似不过多介绍

super 理解

class LickDog {
      constructor(name, lick) {
        this.name = name;
        this.like = lick;
      }

      love() {
        return this.like;
      }
    }
    class LickDog1 extends LickDog {
      constructor(name, lick, money) {
        console.log(this)  //super(name, lick)会调用父类的constructor(name, lick)   所以在super之前获取this是会报错 拿不到父类对象
        super(name, lick);
        console.log(JSON.parse(JSON.stringify(this))); //不会报错的
        this.money = money;
      }
      love1() {
      // super能调用父类love 但super是拿不到 name和like的是undefind
        return this.money + " 不配喜欢 " + super.love(); 
      }
    }
    const ding1 = new LickDog1("舔狗", "班花", "6块");

image.png image.png

兄弟们 love1()打印了 " 6元不配喜欢班花了" 穷难道不能拥有爱情吗? 好在super.love()能拿到值 原因是:super.love()就相当于LickDog.prototype.love(),而name和like是在LickDog实例上面,
super 当做对象则是 表示父类的原型对象
super 当做函数,示父类的构造函数,生成一个父类的this对象,所以super()后是可以拿到this
super称为基类,为啥这样叫我也不懂,下图我深拷贝了此时的this,