IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> ES6 Class类 -> 正文阅读

[JavaScript知识库]ES6 Class类

Class类

类的由来以及其基础用法

简介:通过class关键字,可以定义类,基本上,es6的class可以看做只是一个语法糖,它的绝大部分功能,es5都可以做到class写法只是让对象原型的写法更加清晰更象面向对象编程的语法而已.

JavaScript 语言中,生成实例对象的传统方法是通过构造函数.
如下:

 function Phone(brand, price) {
            this.brand = brand;
            this.price = price
        }

        // 添加方法
        Phone.prototype.call = function () {
            console.log('我可以打电话');
        }

        // 实例化对象

        let Huawei = new Phone('华为', 5999);
        Huawei.call();
        console.log(Huawei);

上面这种写法跟传统的面向对象语言(比如 C++ 和 Java)差异很大,很容易让新学习这门语言的程序员感到困惑。(开始就是学前端的我只感觉到懵逼!)

ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。


 class Phone {  //定义一个名为 Phone 的类
            constructor(brand, price) {    //constructor 是一个构造方法,用来接收参数 
                this.brand = brand;   //这里的 this 代表的是实例对象
                this.price = price;
            }
            call() {
                console.log('我可以打电话');
            }
        }
        let Huawei = new Phone('华为', 5999);
        console.log(Huawei);

       
        console.log(typeof Phone);// function
        console.log(Phone === Phone.prototype.constructor);// true

由上面可以看出类的实质上就是一个函数,类的自身指向的就是构造函数,所以可以认为es6中的类其实就是构造函数的另一种写法。

类的继承

 class Wallet {
        constructor(money) {
            this.money = money;
        }
        goShopping() {
            console.log(this.money);
        }
        goBuycar() {
            console.log('买辆夸戳');
        }
    }
    class BankCard extends Wallet {
        goBuyhouse() {
            console.log(this.money);
        }
        goBuycar() {   //重写(覆盖)父类函数
            console.log('买辆浴皇大帝');
        }
    }

    const endlessMoney = new BankCard('endlessMoney')
    endlessMoney.goShopping(); //endlessMoney
    endlessMoney.goBuyhouse(); //endlessMoney
    endlessMoney.goBuycar(); //买辆浴皇大帝

子类 BankCard 继承了 Wallet 类的 goShopping 函数和 money 这个内部变量。
但是同名函数 goBuycar 没有继承,是调用到了子类的 goBuycar 函数。
这里也可以理解为子类的 goBuycar 函数覆盖了父类的 goBuycar 函数。

super关键字的使用

简述:super关键字用于访问和调用一个对象的父对象上的函数。
在构造函数中使用时,super关键字将单独出现,并且必须在使用this关键字之前使用。
super关键字也可以用来调用父对象上的函数。

 class Wallet {
        constructor(money) {
            this.money = money;
        }
        goShopping() {
            console.log(this.money);
        }
        goBuycar() {
            console.log('买辆夸戳');
        }
    }
    class Pocket extends Wallet {
        constructor(money, bankCard) {  //子类中扩展了一个 bankCard
            super(money);   //必须先使用super调用,才会有下文的this对象,
            this.bankCard = bankCard;
        }

        goBuycar() {
            super.goBuycar();
            console.log('买辆浴皇大帝');
            console.log(this.money);
            console.log(this.bankCard);

        }
    }

    const endlessMoney = new Pocket('endlessMoney', 'endlessLover')

    endlessMoney.goBuycar();

//依次输出:买辆夸戳  //买辆浴皇大帝  //endlessMoney  //endlessLover

用super关键字实现了子类的构造器,并扩展了1个变量 bankCard,同时使用super调用到了父类的方法,
所以在子类中即使有父类的同名方法,一样可以实现父类同名方法的调用。
super可以理解为父类的一个会实例化的对象,但不同的是super只能访问父类的方法,不能访问私有变量。

static关键字

简述: 类(class)通过 static 关键字定义静态方法。
不能在类的实例上调用静态方法,而应该通过类本身调用。
这些通常是实用程序方法,例如创建或克隆对象的功能。
静态方法调用直接在类上进行,不能在类的实例上调用。静态方法通常用于创建实用程序函数

 class Wallet {  //没有constructor的类会默认生成一个constructor构造器
        static BankCard() {
            console.log('endlessMoney');
        }
    }
    class Money extends Wallet { }

    const endlessLover = new Money()

    Wallet.BankCard();
    Money.BankCard();
    // endlessLover.BankCard();  //报错 BankCard is not a function at

static关键字一般作用于类的方法,用来定义一个工具函数。static方法不能被实例对象调用,只能通过类名来调用。
同时static方法也可以被继承,而且也能在子类中用super对象来调用父类中的static方法。
用实例化的对象来调用static方法时,代码会报错。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-30 12:28:21  更:2021-10-30 12:30:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:58:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码