ES5 和 ES6 类的实现

1. 定义方式

ES5:通过构造函数和原型链模拟类

javascript 复制代码
// 构造函数作为类的定义
function Person(name) {
  this.name = name;
}

// 原型上定义方法
Person.prototype.sayHello = function() {
  console.log("Hello, " + this.name);
};

ES6 :使用 class 关键字声明类,语法更简洁清晰

javascript 复制代码
class Person {
  // 构造方法
  constructor(name) {
    this.name = name;
  }
  
  // 类方法(自动添加到原型)
  sayHello() {
    console.log(`Hello, ${this.name}`);
  }
}

2. 继承实现

ES5 :通过 call/apply 继承属性,Object.create 继承方法

javascript 复制代码
function Student(name, grade) {
  // 继承属性
  Person.call(this, name);
  this.grade = grade;
}

// 继承方法
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;

// 子类方法
Student.prototype.study = function() {
  console.log(`${this.name} is studying`);
};

ES6 :使用 extends 关键字声明继承,super 调用父类

javascript 复制代码
class Student extends Person {
  constructor(name, grade) {
    // 必须先调用super()
    super(name);
    this.grade = grade;
  }
  
  study() {
    console.log(`${this.name} is studying`);
  }
}

3. 方法定义

  • ES5:所有方法需显式添加到原型上
  • ES6:类体内直接定义方法,自动成为原型方法,无需手动绑定原型

4. 静态方法

  • ES5:直接挂载到构造函数上
javascript 复制代码
Person.create = function(name) {
  return new Person(name);
};
  • ES6 :使用 static 关键字声明
javascript 复制代码
class Person {
  static create(name) {
    return new Person(name);
  }
}

总结

ES6 的 class 本质上是 ES5 原型继承的语法糖,但提供了更清晰、更接近传统面向对象语言的语法,同时增加了一些新特性,使类的定义和继承更加直观和易于维护。不过,理解 ES5 的原型实现有助于深入掌握 JavaScript 的面向对象本质。

相关推荐
程序员黑豆2 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
To_OC3 小时前
踩了个 TS 的坑之后,我终于把 type 和 interface 掰明白了
前端·react.js·typescript
GreenTea3 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
浮生望3 小时前
前端API工程化:用 Mock 数据与 Axios 配置实现独立于后端的并行开发
前端
万少4 小时前
给 DeepSeek Harness 装个"应用商店":一条命令,595 个插件随你逛
前端·javascript·后端
波波0074 小时前
C# 15 重磅新特性: 带标签 break 与 continue:重新定义嵌套循环控制流
服务器·前端·c#
Brown.alexis5 小时前
es6知识点1-自备使用
前端·ecmascript·es6
小爬的老粉丝6 小时前
JavaScript 纯前端预览 WPS:先识别容器,再路由解析器
前端·javascript·wps
计算机魔术师6 小时前
新兴多智能体系统的模式与问题
前端
用户059540174467 小时前
AI Agent 上下文污染踩坑实录:用 pytest + Redis 揪出 3 类记忆串号 bug,排查 6 小时
前端·css