前端研习录(43)——ES6 Class讲解及示例分析


版权声明

  • 本文原创作者:清风不渡
  • 博客地址:https://blog.csdn.net/WXKKang

  重拾前端记忆,记录学习笔记,现在进入Class部分

一、Class类基本知识

1、ES5

  JavaScript中,传统一般通过构造方法来生成实例对象,示例如下:

function Person(name,age) {
            this.name = name;
            this.age = age;
        }

        Person.prototype.getName = function () {
            console.log(this.name);
        }

        const person = new Person("Tom",18);
        person.getName();

2、ES6

  ES6引入了class(类)这个概念,通过class关键字可以定义一个类,这样让对象的写法变得更清晰,更像面向对象编程,示例如下:

class myMath{
            constructor(x,y){
                this.x = x;
                this.y = y;
            }

            add(){
                return this.x+"+"+this.y+"="+(this.x+this.y);
            }

        }

        const my = new myMath(1,2);
        console.log(my.add());

3、constructor方法

  constructor方法是类的默认方法,通过new命令生成对象时,会自动调用该方法,如果没有显示定义,则会有一个空的constructor方法被默认添加

4、类的实例

  通过new关键字来生成类的实例

注意:通过class定义的类是不存在提升的

二、Class的属性与方法

1、实例方法

  通过类的实例对象调用方法

2、实例属性

  实例属性是指类的实例对象可调用的属性

3、静态方法

  通过static不需要声明实例,可直接通过类来调用的方法叫做“静态方法”
  当然,静态方法不能被实例所继承

注意:如果静态方法中包含this,则它指向的是类,而不是实例

3、静态属性

  静态属性是指Class本身的属性,即Class.propName

  示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>清风不渡</title>
</head>
<body>
    <script>
        class People{

            constructor(name,age){
                this.name = name;
                this.age = age;
            }
            
            eat(){
                console.log("I'm eating");
            }

            static sayHello(){
                console.log("hello");
            }

        }

        //实例方法
        const p1 = new People();
        p1.eat();
        
        //实例属性
        const p2 = new People("Tom",18);
        console.log(p2.age);

        //静态方法
        People.sayHello();
        //由于静态方法不能被继承,故此段代码会引起报错
        //p2.sayHello();

        //静态属性
        People.pass ="123";
        console.log(People.pass);

    </script>
</body>
</html>

三、Class的继承

  Class可以通过extends 关键字实现继承,让子类继承父类的属性和方法
  ES6规定,子类必须在constructor()方法中调佣super();否则将会报错,这是因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,添加子类自己的实例属性和方法,如果不调用super()方法,子类就得不到自己的this对象,示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>清风不渡</title>
</head>
<body>
    <script>
        class People{

            constructor(name,age){
                this.name = name;
                this.age = age;
            }
            
            getName(){
                console.log(this.name);
            }

            static sayHello(){
                console.log("Hello");
            }
        }

        class Man extends People{

            constructor(name,age,height){
                super(name,age);
                this.height = height;
            }

            getHeight(){
                console.log(this.height);
            }


        }

        const m1 = new Man("Tom",18,"175cm");
        m1.getName();
        Man.sayHello();
        m1.getHeight();

    </script>
</body>
</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值