JavaScript ES6 Class类全方位进阶指南

 更新时间:2026年04月03日 08:38:03   作者:发现一只大呆瓜  
在ES6中class(类)作为对象的模板被引入,可以通过class关键字定义类,这篇文章主要介绍了JavaScript ES6 Class类全方位进阶指南的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

在 ES6 之前,JavaScript 开发者必须通过构造函数和原型链(prototype)来模拟“类”的行为,代码既冗长又容易出错。ES6 引入了 class 关键字,虽然它本质上是语法糖,但它让 JavaScript 的面向对象编程变得更加清晰和标准。

一、 基础:类的定义与实例化

class 将构造函数(constructor)和原型方法(speak)统一封装在一个大括号内。

class Animal {
    // 构造函数:每当 new 一个实例时自动调用
    constructor(name) {
        this.name = name; // 实例属性
    }
    // 原型方法:定义在 Animal.prototype 上,供所有实例共享
    speak() {
        console.log(`${this.name} speak!!!`);
    }
}
const dog = new Animal('dog');
dog.speak(); // dog speak!!!

二、 继承:extends 与 super 的力量

继承让子类可以复用父类的逻辑。在子类中,super 是连接父类的桥梁。

核心规则

  1. 必须调用 super:子类如果没有自己的 constructor,引擎会默认添加。如果有,则必须在访问 this 之前调用 super() ,否则会报错。
  2. 方法复用:可以使用 super.methodName() 调用父类的普通方法。
class Animal {
    constructor(name) {
        this.name = name;
    }
    eat() {
        return `${this.name} needs food`;
    }
}
class Cat extends Animal {
    constructor(name, color) {
        // 1. 调用父类构造函数(传递 name)
        super(name); 
        this.color = color;
    }
    eatFood() {
        // 2. 通过 super 调用父类的原型方法
        console.log(`${this.name} is ${this.color}, ${super.eat()}`);
    }
}
const mimi = new Cat('mimi', 'white');
mimi.eatFood(); // mimi is white, mimi needs food

三、 静态成员:static 关键字

static 定义的属性和方法属于类本身,而不是实例。

注意事项

  • 不可继承:实例对象无法访问静态方法。
  • this 指向:静态方法中的 this 指向的是 类本身,而不是实例。
class Animal {
    static feet = 4; // 静态属性
    static eat() {
        // 注意:这里的 this 指向 Animal 类本身
        console.log(`${this.name} is eating`); // 这里的 this.name 输出的是 "Animal"(类的名字)
    }
}
const cat = new Animal();
console.log(cat.feet);      // undefined (实例无法访问)
console.log(Animal.feet);   // 4 (类直接访问)
Animal.eat();               // "Animal is eating"

四、 面试模拟题

Q1:ES6 的 class 声明和普通 function 构造函数有什么区别?

参考回答:

  1. 严格模式class 内部默认就是严格模式。
  2. 变量提升class 不存在变量提升(存在暂时性死区),必须先定义后使用。
  3. 调用方式class 必须配合 new 调用,直接调用会报错;而普通构造函数可以作为普通函数执行。
  4. 原型方法class 定义的方法是不可枚举的。

Q2:子类构造函数中为什么必须先调用super()?

参考回答:

在 ES5 的继承中,是先创建子类的 this,然后再将父类的方法属性添加到 this 上。

但在 ES6 的继承中,是先创建父类的实例对象 this(通过 super()),然后再用子类的构造函数修改这个 this。如果不调用 super(),子类就拿不到 this 对象。

Q3:如何用 ES5 模拟class的静态方法?

参考回答:

在 ES5 中,直接将方法挂载到构造函数函数名上即可:

function Animal() {}
Animal.eat = function() { console.log('eating'); }; // 模拟静态方法

五、 总结

关键字用途核心点
constructor初始化实例new 的时候自动触发
extends建立原型继承子类原型指向父类原型
super指向父类构造函数中必须首行调用
static定义类私有成员只能由类名直接调用

到此这篇关于JavaScript ES6 Class类全方位进阶指南的文章就介绍到这了,更多相关ES6 Class类指南内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Javascript oop设计模式 面向对象编程简单实例介绍

    Javascript oop设计模式 面向对象编程简单实例介绍

    这篇文章主要介绍了Javascript oop设计模式 面向对象编程简单实例介绍的相关资料,这里附有实例代码帮助大家学习理解,需要的朋友可以参考下
    2016-12-12
  • js canvas实现QQ拨打电话特效

    js canvas实现QQ拨打电话特效

    这篇文章主要为大家详细介绍了js canvas实现QQ拨打电话特效,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 微信小程序class封装http代码实例

    微信小程序class封装http代码实例

    这篇文章主要介绍了微信小程序class封装http,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 原生js轮播特效

    原生js轮播特效

    这篇文章主要为大家详细介绍了原生js轮播特效,简单实用的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • typescript中type和interface的区别有哪些

    typescript中type和interface的区别有哪些

    大家使用typescript总会使用到interface和type,所以下面这篇文章主要给大家介绍了关于typescript中type和interface区别的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • 使用JavaScript获取URL中的参数(两种方法)

    使用JavaScript获取URL中的参数(两种方法)

    这篇文章主要介绍了使用JavaScript获取URL中的参数(两种方法)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • JS实现电脑虚拟键盘的操作

    JS实现电脑虚拟键盘的操作

    这篇文章主要为大家详细介绍了JS实现电脑虚拟键盘的操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • js实现幻灯片轮播图

    js实现幻灯片轮播图

    这篇文章主要为大家详细介绍了js实现幻灯片轮播图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • JavaScript中数据结构与算法(一):栈

    JavaScript中数据结构与算法(一):栈

    这篇文章主要介绍了JavaScript中数据结构与算法(一):栈,本文讲解了栈的结构、什么是回文以及递归等内容,讲解的不错,通俗易懂,需要的朋友可以参考下
    2015-06-06
  • TypeScript中的接口Interface详解(对象类型的强大工具)

    TypeScript中的接口Interface详解(对象类型的强大工具)

    TypeScript中的接口是一个强大而灵活的特性,它为我们提供了一种清晰、简洁的方式来定义对象的结构和类型,通过使用接口,我们可以编写更加健壮、可维护的代码,这篇文章主要介绍了TypeScript中的接口(Interface):对象类型的强大工具,需要的朋友可以参考下
    2024-08-08

最新评论