美文网首页
ES6中class的使用

ES6中class的使用

作者: 骑着母猪去买菜 | 来源:发表于2018-11-29 00:46 被阅读0次

在ES6之前创建类的方式与用class创建类的方式的区别:

function Person(name, age) {
    this.name = name
    this.age = age
}
var person = new Person('张三', 18)

class Person {
    // 这是Person的构造器
    constructor(name, age) {
        this.name = name
        this.age = age
    }
}
var person = new Person('李四', 20)

每个类中都有一个构造器,如果没有手动指定构造器,那么,可以认为类内部中有一块隐藏的构造器,类似于constructor(){},每次执行 new 时,会优先执行构造器中的代码。

实例属性与静态属性

在声明类时,构造函数上传入的属性,称为实例属性。直接挂载到类上的属性,称为静态属性,静态属性无法在实例中调用。ES6 class关键字,静态属性的声明方式:

class Person {
    constructor(name, age) {
        this.name = name
        this.age = age
    }
    static info = '这是一个静态属性'
}
var person = new Person('张三', 18)
console.log(person.name)    // 张三
console.log(person.info)    // undefined
console.log(Person.info)    // 这是一个静态属性

实例方法与静态方法

class Person {
    constructor(name, age) {
        this.name = name
        this.age = age
    }
    // 实例方法
    sayHello() {
        console.log('Hello, ' + this.name)
    }
    // 静态方法
    static eat() {
        console.log('eat')
    }
}
var person = new Person('张三', 20)
person.sayHello()   // Hello, 张三
person.eat()        // undefined
Person.eat()        // eat

继承

class通过extends关键字实现继承

语法:class 子类 extends 父类 {}

原代码:

class Chinese {
    constructor(name, age) {
        this.name = name
        this.age = age
    }
}
class American {
    constructor(name, age) {
        this.name = name
        this.age = age
    }
}

通过extends继承:

// 父类
class Person {
    constructor(name, age) {
        this.name = name
        this.age = age
    }
    sayHello() {
        console.log('Hello, ' + this.name)
    }
}
// 子类
class Chinese extends Person {}
class American extends Person {}

var zs = new Chinese('张三', 18)
var jack = new American('jack', 18)

super函数的使用

  1. 如果一个子类通过extends关键字继承了父类,那么在子类的constructor中必须优先调用一次super()
  2. super是一个函数,父类的构造器,子类中调用super,就是对父类构造器的引用。
  3. 在子类中,this只能放在super后使用。

示例:

class Person {
    constructor(name, age) {
        this.name = name
        this.age = age
    }
}
class Chinese extends Person {
    constructor(name, age, idcard) {
        super(name, age)
        this.idcard = idcard
    }
}

注意

  1. class{ ... }区间内,只能写构造器、静态方法、静态属性、实例方法、实例属性。
  2. class关键字内部还是使用原来的方法实现,为JavaScript的语法糖。

相关文章

  • 前端JS进阶二(ES6-Class语法)

    Class和普通构造函数有何区别 前端会使用ES6中的Class来代替JS中的构造函数 JS 构造函数 Class...

  • react 中 class 和 createClass的区别

    class 是ES6中的写法,如果想要创建组件却不使用ES6,那就使用(ES5)createClass。 前者组件...

  • 手写乞丐版的Promise

    使用es6,class手写promise class NewPromise { constructor(exe...

  • ES6构建React应用时,this指向问题

    使用ES6的时候,用class创建组件,class中的方法并不会自动把this绑定到示例中,针对以上,有以下几种方...

  • wepy脚手架工具

    学习目标 使用wepy框架开发小程序 = 了解ES6中的class类 . 轮播图组件的使用 使用flex布局...

  • es6中的class使用

    介绍 >生成实例对象,构造函数的另一种写法 >类的数据类型是函数,本身指向构造函数 >类的方法都定义在pro...

  • ES6中class的使用

    在ES6之前创建类的方式与用class创建类的方式的区别: 每个类中都有一个构造器,如果没有手动指定构造器,那么,...

  • 12.ES6面向对象

    ES6中增加了面向对象1、使用class关键字定义2、构造器使用constructor定义 案例

  • ES6中的class的使用

    js的传统生成一个类的方法,需要定义一个构造函数,然后通过new的方式生成。 ``` function Cat()...

  • ES6中类与类的继承

    ES6以前,javascript中类的继承可以使用function和原型prototype来模拟类class来实现...

网友评论

      本文标题:ES6中class的使用

      本文链接:https://www.haomeiwen.com/subject/blotcqtx.html