登录
首页 >  文章 >  前端

JavaScript类详解及ES6类使用教程

时间:2026-02-08 10:15:38 201浏览 收藏

在文章实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《JavaScript类是什么?ES6类使用教程》,聊聊,希望可以帮助到正在努力赚钱的你。

JavaScript 的 class 是 function 和原型继承的语法糖,基于原型而非传统类;声明不提升,处于暂时性死区;子类 constructor 必须先调 super() 才能用 this;方法不可枚举;静态方法挂载类本身;类字段是实例属性,不共享。

javascript中类是什么_如何使用ES6类语法【教程】

JavaScript 中的 class 不是新的对象创建机制,而是 function 和原型继承的语法糖——它背后仍是基于原型(prototype)的,不是传统面向对象语言中的“类”。直接用它写业务没问题,但若不理解底层,遇到 ReferenceErrorthis 绑定异常或继承行为不符预期时会卡住。

class 声明不会被提升,必须先定义后使用

function 声明不同,class 是「暂时性死区」(TDZ)的一部分。在声明前访问会抛出 ReferenceError,哪怕只是 typeof 也不行。

  • new MyClass() 放在 class MyClass { ... } 上方 → 报错 ReferenceError: Cannot access 'MyClass' before initialization
  • typeof MyClass 同样报错;而 typeof functionName 在函数声明前是 "function"
  • 如果需要前置调用,改用 const MyClass = class { ... }(类表达式),它和 const 一样遵循块级作用域规则,但也不会被提升

constructor 中的 this 指向新实例,但必须显式调用 super() 才能访问 this

在子类 constructor 中,不调用 super() 就用 this,会立即报 ReferenceError: Must call super constructor in derived class before accessing 'this'

  • 即使子类没写 constructor,JS 也会自动补一个隐式的 constructor(...args) { super(...args); }
  • super() 必须在 this 之前调用,且传参需匹配父类 constructor 签名,否则父类初始化失败
  • 若父类 constructor 返回一个对象(非常规操作),this 会被替换为那个返回值——这种写法极少见,但会影响子类逻辑

方法默认不可枚举,且无法被 for...in 遍历

class 内部定义的方法(包括 constructor、普通方法、getter/setter)都会被设置为 enumerable: false,这是与字面量对象的关键区别。

  • Object.keys(MyClass.prototype) 返回空数组;而 Object.getOwnPropertyNames(MyClass.prototype) 能拿到方法名
  • 静态方法(static method())挂载在类本身上,MyClass.method() 可调,但 instance.method() 不可调
  • 箭头函数不能用作类方法:写成 method = () => {} 是类字段(class field),属于实例属性,每次 new 都新建函数,不共享,且无法被子类 super.method() 调用

真正容易被忽略的是:class 的静态属性(如 MyClass.prop = 1)和原型属性(如 MyClass.prototype.prop = 1)依然可以手动添加,但这类写法破坏封装性,也绕过了 class 的语义边界。当需要动态扩展行为时,优先考虑组合或装饰器模式,而不是在运行时修补原型。

终于介绍完啦!小伙伴们,这篇关于《JavaScript类详解及ES6类使用教程》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>