React学习——Day6

在学习使用class关键字创建组件之前,我们先来了解一下ES6中class关键字的用法。ES6中的class关键字,是实现面向对象编程的新形式。

一、class-创建类并通过constructor挂载实例属性

【实例属性】:通过new出来的实例访问到的属性。

// 创建了一个动物类
class Animal {
    // 这是类中的构造器。每一个类中,都有一个构造器,如果我们程序员没有手动指定构造器,那么,
    // 可以认为类内部有个隐形的、看不见的空构造器,类似于constructor(){}
    // 构造器的作用,就是每当new这个类的时候,必然会优先执行构造器中的代码
    constructor(name, age){
        this.name = name;
        this.age = age;
    }
}

const a1 = new Animal('monkey', 3);
console.log(a1.name);  // monkey
console.log(a1.age);  // 3

二、class-使用static创建静态属性

【静态属性】:通过构造函数直接访问到的属性。

class Animal{
	static gender = '雄/雌';
}
console.log(Animal.gender);  // 雄/雌

三、class-实例方法和静态方法

class Animal {
    fn1 = function () {
        console.log('这是Animal的实例方法');
    };
    static fn2 = function () {
        console.log('这是Animal的静态方法');
    }
}

const a1 = new Animal();
a1.fn1();  // 这是Animal的实例方法
Animal.fn2();  // 这是Animal的静态方法

实例方法是挂载到实例对象的原型中;静态方法是挂载到构造函数的构造器中,因此实例访问不到。今后实例属性和实例方法我们用的会比较多,较少使用类的静态属性与静态方法。

四、使用class的两个注意点

  • 在class的{ }区间内,只能写构造器、静态方法、静态属性和实例方法。
  • class关键字内部,还是用原来的function(){}构造函数来实现的,所以说,我们把class关键字称作语法糖。

五、class-使用extends实现子类继承父类

在class类中,可以使用extends关键字实现子类继承父类。
语法:class 子类 extends 父类 {}
这里我们可以把父类理解为原型对象。

class Animal {
    constructor(name, age){
        this.name = name;
        this.age = age;
    }
}
class dog extends Animal {

}
const d1 = new dog('玛丽', 4);
console.log(d1);  // {name: "玛丽", age: 4}

六、子类访问父类上的实例方法

注意:这里我们说的实例方法是相对于静态方法来说的,熟悉JS原型的同学应该都知道严格意义上的实例方法是定义在构造函数中、不被各个实例共享的方法。

class Animal {
    eat = function(){
        console.log('I can eat!');
    }
}
class dog extends Animal {

}
const d1 = new dog();
d1.eat();  // I can eat!

七、class-constructor构造器中super函数的使用说明

如果一个子类通过extends关键字继承了父类,那么,在子类的constructor构造函数中,必须优先调用一下super()。
super是一个函数,而且,它是父类的构造器;子类中的super,其实就是父类中constructor构造器的一个引用。

class Animal {
    constructor(name, age){
        this.name = name;
        this.age = age;
    }
}
class dog extends Animal {
    constructor(name, age){
        super(name, age);
    }
}
const d1 = new dog('玛丽', 4);
console.log(d1); // {name: "玛丽", age: 4}

八、为子类挂载独有的实例属性

有些属性是子类独有的,既然是独有的,就不适合挂载到父类上。比如:

class Animal {
    constructor(name, age){
        this.name = name;
        this.age = age;
    }
}
class dog extends Animal {
    constructor(name, age, kind){
        super(name, age);
        this.kind = kind;
    }
}
const d1 = new dog('玛丽', 4, '泰迪');
console.log(d1); // {name: "玛丽", age: 4, kind: "泰迪"}

这里需要注意一点,为子类挂载独有的属性操作必须在super调用之后,否则会报错。

小结

以上介绍了ES6中class关键字的使用方法,在学会使用class来创建类以及实现继承之后就可以用其创建React当中的组件了😊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值