欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ES6 class

程序员文章站 2022-07-13 08:41:42
...

class

一、定义一个class

constructor 是一种用于创建和初始化class创建的对象的特殊方法。

"use strict";
class Person {
    constructor(name) {
        this.name = name;
    }
    say () {
        console.log("hello world");
    }
};
new Person().say(); // hello world

注意: ES6中声明的类不存在函数声明提前的问题, 类必须先声明再使用,否则会出现异常 。
ES6 class

二、静态方法和原型方法

ES6 class
注意:静态方法跟原型没有关系,也不能所谓实例化出来。Person类上有静态方法,而p1没有。

三、静态属性和原型属性

  • 只能在类定义完毕以后再定义静态属性
  • 原型上面也不能定义属性了, 我们只能在原型上定义set和get, 取值和设值器, 要注意取值器和设值器是在原型上
"use strict";

class Person {
    constructor(name) {
        this.name = name;
    }
    say () {
        console.log("hello world 原型方法"); // .prototype.say()
    }
    static info(){
        console.log('我是一个类 静态方法')
    }
};

Person.sex = "0"; //静态属性

console.log(Person.sex)  //0
"use strict";

class Person {
    constructor(_name) {
        this._name = _name;
    }
    get name(){
        return this._name;
    }
    set name(_name){
        this._name = _name;
    }
};

var p = new Person();

p.name = "Jack";

console.log(p.name) //Jack
console.log(p._name) //Jack

如果要定义原型属性的话, 直接把属性定义在constructor内部即可。

四、类的继承extends

"use strict";

class Person {
    constructor(name) {
        this.name = name;
    }
    say(){
        console.log("hello class")
        return this    //链式调用
    }
};

class SuperMan extends Person {
    constructor(name,power){
        super(name) //// 注意: 在派生类中, 必须先调用 super()   调用的同时,会绑定 this 。
        this.superPower = power
    }
    show(){
        console.log(this.superPower)
        return this  // 链式调用
    }
}

console.log( new SuperMan("Rose","pee").show().say().name) //pee    hello class     Rose

如果要使用继承的话, 在子类中必须执行super()调用父类, 否者编译器会抛错, 在子类中的super有三种作用:

  • 第一是作为构造函数直接调用,
  • 第二种是作为父类实例,
  • 第三种是在子类中的静态方法中调用父类的静态方法。