ES6-Class 记录

来源:互联网 发布:java获取当天0点时间 编辑:程序博客网 时间:2024/06/05 11:08

  一. Class基础用法:

在ES6之前我们一般这样写

         function Cat(name) {         this.name = name;         }         Cat.prototype.sayName = function() {         console.log("name: " + this.name);         }                  var cat = new Cat('ZZ');         cat.sayName();

  ES6引入Class后这个函数就可以这样写

        class Cat {          constructor(name) {        this.name = name;          }                    sayName() {          console.log("name: " + this.name);          }        }        var cat = new Cat('ZZ');        cat.sayName();


这样写有点感觉类似java中类的写法。

当你用 new 生成实例时 constructor方法就会自动调用,即使你没有定义方法 也会默认添加的

constructor方法被调用时就会接受传递的参数。

这里有两点需要注意:

1. 

        class Cat {          constructor(name) {        this.name = name;          }                    sayName() {          console.log("name: " + this.name);          }        }        Cat();

这样写是会报错的 因为当你用Class时 必须用new声明实例

2.

      var cat = new Cat("ZZ");        class Cat {          constructor(name) {        this.name = name;          }                    sayName() {          console.log("name: " + this.name);          }        }
这样写也是会报错的( Cat is not defined)  因为 Class不存在变量提升了。


二. 继承:

继承的代码是这样的:
         class  animal {           constructor(name) {             this.name = name;           }           run() {             console.log('name: ' + this.name + ' run run');           }         }                class Cat extends animal {          constructor(name, age) {            super(name);            this.age = age;          }                    sayName() {            console.log("name: " + this.name + ' age: ' + this.age);          }        }        var cat = new Cat("xiaoMing", 17);        cat.run();        cat.sayName();

运行结果是:
 
name: xiaoMing run runname: xiaoMing age: 17

Class的继承通过extends 实现

然后在子类Cat中的 constructor 方法内 通过super 向父类传递参数 


这里有两点需要注意

1 constructor 方法内必须写super 否则会报错

2.super之前使用this关键字是会报错的

  像这样

this.age = age;super(name);

三.取值函数(getter)和存值函数(setter)

 代码:

        class Cat{          constructor() {          }          get age() {          return this.num;          }          set age(num) {          this.num = num;          }                }        var cat = new Cat();        cat.age = 17;        console.log('cat age: ' + cat.age);//17


四 Class静态方法(static)

 当我将某个方法加上 static关键字时 这个方法就不会被实例继承,只能通过类来调用

这句话的意思用代码表示就是:

   class  animal {          constructor(name) {            this.name = name;          }          run() {            console.log('name: ' + this.name + ' run run');          }          static walk() {            console.log('walk walk');          }        }                class Cat extends animal {          constructor(name, age) {          super(name, age);          }        }        var cat = new Cat('xiaoMing', 17);         cat.run();         cat.walk();         animal.walk();         Cat.walk();

这段代码在运行时就会报错 (cat.walk is not a function)

 当把

 cat.walk();
注释掉就不会报错了.

仔细观看代码你会发现 父类和子类都可以调用这个被static修饰的 方法.


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝五个月了不吃奶粉怎么办 1岁婴儿入睡困难怎么办 怀孕五个月胎儿肾积水怎么办 15个月宝宝总喊怎么办 学业水平考试有d怎么办 买了水果碰见领导怎么办 高一孩子不愿意上学怎么办 专家解答 孩子不愿意上学怎么办 冬天脚冷怎么办膝盖疼 拉拉裤大了怎么办小妙招 孕37周翻身困难怎么办 晚上睡不好白天犯困怎么办 抑郁症又不想起床了怎么办 儿童憋尿功能太差怎么办 一个月的宝宝睡眠不好怎么办 被商场要求撤场怎么办 上班没法接孩子放学怎么办 幼儿下午放学与上班错开怎么办 宝宝早上醒的早怎么办 晚卜睡不着尿多怎么办 要求正常休息公司不准怎么办 我早起被室友说怎么办? 小孩晚上睡的晚怎么办 初中一年级学不扎实怎么办 一年级学生上课爱说话怎么办 孩子不按时完成作业怎么办 高三理科基础不好怎么办 字写快了就难看怎么办 高一文科280分怎么办 高三了学不进去怎么办 副职兼任法人不够条件怎么办 正职和上级不和副职怎么办 中层正职和上级不和副职怎么办 陆军军官年龄大了怎么办 ps选区选多了怎么办 香港货物被海关扣了怎么办 羽绒服棉填充物不均匀了怎么办 蛀牙到牙神经了怎么办 t恤袖子长了怎么办 t恤袖子短了怎么办 ofo突然要交押金余款怎么办