什么是JavaScript的类_它如何模拟面向对象编程呢

1次阅读

javaScript 的 class 是原型机制的语法糖,本质仍是基于 prototype继承;它通过 constructor 定义构造函数,方法自动挂载到 prototype,支持封装、继承(extends/super)、多态,但无类提升且需显式调用 super()。

什么是JavaScript的类_它如何模拟面向对象编程呢

javascriptclass 并不是传统意义上的“类”,而是一种语法糖(syntactic sugar)——它底层依然基于原型(prototype)机制,但提供了更清晰、更接近其他面向对象语言(如 Java、c++)的写法,让开发者更容易组织和理解代码。

class 是如何工作的

es6 引入的 class 关键字并不会改变 JavaScript 的原型继承本质。它只是把原本用函数 + prototype 手动定义构造器和方法的方式,包装成更直观的结构:

  • 声明一个 class 实际上等价于定义一个构造函数(constructor)
  • 类中的方法会自动添加到该构造函数的 prototype
  • new MyClass() 仍通过原型链查找方法,和以前完全一致

它怎么模拟面向对象的核心特性

虽然 js 没有原生的类系统,但 class 让以下 OOP 特性表达得更自然:

  • 封装:通过 #privateField(私有字段)或约定(如 _name)限制外部直接访问
  • 继承:用 extendssuper() 复用父类逻辑,实际仍是 Object.setPrototypeOf(Child.prototype, Parent.prototype)
  • 多态子类可重写父类方法,调用时根据实例类型动态决定执行哪个版本

一个简单例子说明本质

下面两个写法功能完全等价:

什么是JavaScript的类_它如何模拟面向对象编程呢

Text-To-Pokemon口袋妖怪

输入文本生成自己的Pokemon,还有各种选项来定制自己的口袋妖怪

什么是JavaScript的类_它如何模拟面向对象编程呢 1487

查看详情 什么是JavaScript的类_它如何模拟面向对象编程呢

立即学习Java免费学习笔记(深入)”;

/* class 写法(推荐,易读) */ class Animal {   constructor(name) {     this.name = name;   }   speak() {     console.log(`${this.name} makes a sound`);   } } <p>/<em> 等价的传统写法(原型方式) </em>/ function Animal(name) { this.name = name; } Animal.prototype.speak = function() { console.log(<code>${this.name} makes a sound</code>); };

需要注意的关键点

  • class 声明不会被提升(hoisted),必须先定义再使用
  • 类内部所有方法默认是不可枚举的(符合预期),且严格模式下自动启用
  • 静态方法(Static)挂载在构造函数本身,而非原型上
  • 继承时必须在子类 constructor 中调用 super(),否则无法访问 this

基本上就这些。class 不是魔法,它让原型继承更友好,而不是取代它。

以上就是什么是JavaScript的类_它如何模拟

text=ZqhQzanResources