博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于ES6 Class语法相关总结
阅读量:5327 次
发布时间:2019-06-14

本文共 2302 字,大约阅读时间需要 7 分钟。

关于ES6,其实网上已经有很多的资料可供查询,教程可参考阮一峰大神的,本文只是对Class这一语法做一个总结:

一、Class基本语法

constructor方法

constructor是类的默认构造方法,new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。

this的指向

类的方法内部如果含有this,它默认指向类的实例。注意,在static静态方法中,this会指向当前类,不是实例;

静态方法和实例方法

静态方法是在方法名前面加static关键字,静态方法不会被实例继承,只能通过类来调用。如在实例上调用,则会抛出一个错误;注意,如果静态方法包含this关键字,这个this指的是类,而不是实例。

实例方法可通过new关键字直接调用,同ES5一样;

静态属性和实例属性

静态属性指的是 Class 本身的属性,即Class.propName,而不是定义在实例对象(this)上的属性。ES6,定义类的属性,不能定义在类里面,需要在外面定义,见代码:

Class Person{}Person.school = "Beijing University";

ES7中,可定义在类的内部,前面加static关键字即可;

类的实例属性可以用等式,写入类的定义之中。在实例上,可以直接调用这个属性;

二、Class继承

Class 可以通过extends关键字实现继承,见代码:

class A{}class B extends A{}

子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象。

父类的静态方法,也会被子类继承。

最后,见下面代码:

class Person {    constructor(name, age) {        this.name = name;        this.age = age;    }    static log(text) {        console.log(`Helow ${text},I'm come from ${this.school}`)    }    toString() {        return (`My name is ${this.name},I'm ${this.age}`)    }}Person.school = "Beijing University";Person.log("Jack");// 创建一个实例var person = new Person("Jason", 30);           // ==> Helow Jack,I'm come from Beijing Universityconsole.log(person.toString())                  // ==> My name is Jason,I'm 30console.log(person instanceof Person);          // ==> trueconsole.log(Person instanceof Object);          // ==> trueconsole.log(person.age);                        // ==> 30console.log(person.hasOwnProperty('age'));      // ==> trueconsole.log(person.hasOwnProperty('log'));      // ==> falseconsole.log(Person.hasOwnProperty('log'));      // ==> trueclass People extends Person {    constructor(name, age, sex) {        super(name, age);        this.sex = sex;        this.string = super.toString();    }    speak() {        // console.log(super.toString(), this.total)        console.log(`${this.string}, My sex is a ${this.sex}`)    }}const people = new People('Tome', 30, 'Man');   people.speak();                                 // ==> My name is Tome,I'm 30, My sex is a ManPeople.log("Lucy");                             // ==> Helow Lucy,I'm come from Beijing Universityconsole.log(people.hasOwnProperty('total'));    // ==> false

转载于:https://www.cnblogs.com/jone-chen/p/8892141.html

你可能感兴趣的文章
UIView中的坐标转换
查看>>
JS性能DOM优化
查看>>
设计模式 单例模式 使用模板及智能指针
查看>>
c#的const可以用于引用类型吗
查看>>
手动实现二值化
查看>>
What Linux bind mounts are really doing
查看>>
linux top命令详解
查看>>
博弈论小结
查看>>
模拟Post登陆带验证码的网站
查看>>
NYOJ458 - 小光棍数
查看>>
java中常用方法
查看>>
【Programming Clip】06、07年清华计算机考研上机试题解答(个别测试用例无法通过)...
查看>>
HTML基础
查看>>
canvas动画
查看>>
4,7周围玩家
查看>>
关于webpack升级过后不能打包的问题;
查看>>
vue - 生命周期
查看>>
追忆我的2008-养成做笔记的习惯
查看>>
SQL Server用户权限详解
查看>>
VS2017动态链接库(.dll)的生成与使用
查看>>