ES6中的Class类

首先我们来了解一下什么是Class类:

        我们可以将ES6中的Class类看做是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的Class类写法,只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。

接下来了解一下Class类中都有什么方法供我们使用:

1.constructot()方法

constructor()方法是类的默认方法(我们也称之为:构造器),通过new命令生成对象实例时,自动调用该方法。constructor()方法默认返回实例对象(也就是this),也可以指定返回另一个对象。一个类必须有constructor()方法,如果没有显示定义,一个空的constructor()方法会被默认添加。

class Point {
}

// 等同于
class Point {
  constructor() {}
}

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

<script>
        class Dog {
            constructor(name, age) {
                this.name = name;
                this._age = age;
            }
            run() {
                console.log("宇宙第一快");
            }
            // 设置需要带有参数
            set age(a) {
                if (a < 0) a = 0;
                if (a > 20) a = 20;
                this._age = a
            }
            // 获取需要带有返回值
            get age(){
                return this._age;
            }
        }
        const d = new Dog("老黄", 9);
        d.age = 21;//进行赋值
        console.log(d.age);
</script>

3.静态方法:

类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。

<script>
            class Fn{
                static classFn(){
                    return "hello";
                }
            }

            console.log(Fn.classFn());//hello

            let fn = new Fn();
            fn.classFn();//Uncaught TypeError: fn.classFn is not a function
</script>

上面代码中,Fn类的classFn方法前有static关键字,表明该方法是一个静态方法,可以直接在Fn类上调用( fn.classFn() ),而不是在Fn类的实例上调用。如果在实例上调用静态方法,会抛出一个错误,表示不存在该方法。

注意,如果静态方法包含this关键字,这个this指的是类,而不是实例。

<script>
        class Fn {
            static car() {
                this.bur();
            }
            static bur() {
                console.log('hello');
            }
            bur() {
                console.log('world');
            }
        }

        Fn.car() // hello
        Fn.bur();//静态方法可以直接使用类调用
        let f = new Fn();
        f.bur();//普通方法则需要实例对象调用
 </script>

父类的静态方法可以被子类继承:

<script>
        class father{
            static fatherStatic(){
                console.log("father");
            }
        }
        class son extends father{
        }
        son.fatherStatic();//father
</script>

静态方法也是可以从super对象上调用的:

4.静态属性:

静态属性指的是 Class 本身的属性,而不是定义在实例对象(this)上的属性。

<script>
        // 方法一:
        class myClass {
            static myStatic = 10;//加上static 即为静态属性

            constructor() {
                console.log(myClass.myStatic);
            }
        }
        let m = new myClass();//创建实力的时候自动执行constructor()

</script>
<script>
        //方法二:
        class myClass {
            static myStatic = 10;//加上static 即为静态属性
        }
        let m = myClass.myStatic;//创建实例,通过实例调用
        console.log(m);
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值