讲师中心 微信公众号
AI工具推荐 视频效率加速

如何实现JavaScript中的面向对象编程【教程】

夏萱君_4985

夏萱君_4985

发布时间:2026-01-17 20:12:08

|

382人浏览过

|

来源于php中文网

原创

JavaScript面向对象核心在于prototype、this绑定和对象创建本质,class仅为原型链语法糖;构造函数需new调用,方法应挂prototype以复用;工厂函数更安全灵活,适合无需继承的场景。

如何实现javascript中的面向对象编程【教程】

JavaScript 中没有传统意义上的类(class)关键字(ES6 之前),但完全支持面向对象编程——关键不在于语法糖,而在于理解 prototype、this 绑定和对象创建的本质。

用 function 构造函数模拟类行为

这是最基础也最容易出错的方式。构造函数本身只是普通函数,只有通过 new 调用时,this 才指向新对象。

  • 必须用 new 调用,否则 this 指向全局(非严格模式)或 undefined(严格模式)
  • 方法写在 prototype 上才可复用,直接在函数体内用 this.method = function(){} 会为每个实例重复创建函数
  • 继承需手动设置 Child.prototype = Object.create(Parent.prototype),并修复 constructor
function Person(name) {
  this.name = name;
}
Person.prototype.sayHello = function() {
  return `Hello, I'm ${this.name}`;
};
const alice = new Person('Alice');

class 语法只是语法糖,底层仍是原型链

ES6 的 class 看似像 Java/C#,但本质没改变 JavaScript 的原型机制。它不能定义私有字段(直到 #field 提案落地)、不支持多重继承、静态方法仍挂载在构造函数上。

  • class 声明不会被提升,必须先定义后使用
  • super() 必须在子类 constructor 中调用,且必须在访问 this 前完成
  • 所有方法默认不可枚举(Object.keys() 不会返回它们),但 for...in 仍能遍历到原型上的方法
class Animal {
  constructor(name) {
    this.name = name;
  }
  speak() {
    return `${this.name} makes a sound`;
  }
}
class Dog extends Animal {
  constructor(name, breed) {
    super(name);
    this.breed = breed;
  }
}

避免滥用 new 和 this:工厂函数更安全

当不需要共享方法、或想规避 this 绑定问题时,工厂函数(返回普通对象)更轻量、更可控,尤其适合配置对象、DTO 或小型工具封装。

espeak-ng
espeak-ng

使用espeak-ng进行文本转语音

下载

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

  • 没有 prototype 链开销,每个属性/方法都是独立闭包
  • 天然支持私有变量(通过闭包),无需 # 或 WeakMap
  • 无法用 instanceof 判断类型,但可用 typeof obj === 'object' && 'method' in obj 做鸭子检测
function createCalculator(initial = 0) {
  let value = initial;
  return {
    add(n) { value += n; return this; },
    get() { return value; }
  };
}
const calc = createCalculator(5).add(3);
console.log(calc.get()); // 8

真正决定是否“面向对象”的是设计,不是写法

很多人纠结该用 class 还是工厂函数,其实更关键的是:这个对象是否需要状态封装?是否需要多态?是否会被大量实例化?

  • DOM 操作封装、事件总线、单例配置管理器 —— 工厂 + 闭包往往更干净
  • 游戏中的实体(Player、Enemy)、UI 组件(Button、Modal)—— class 更利于组织生命周期和继承关系
  • 高频创建的简单数据载体(如坐标点、颜色值)—— 直接用 plain object 或 Object.freeze({x, y}) 更高效

原型链深了容易调试困难,this 绑定错一次就静默失败,这些比语法选择更值得花时间确认。

相关文章

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

265

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

386

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

355

2025.12.24

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

5335

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

302

2025.11.27

C++ 面向对象编程与设计模式实践
C++ 面向对象编程与设计模式实践

本专题整合了 C++ 面向对象编程的核心机制,涵盖类的定义与访问控制、构造函数与析构函数、拷贝语义与移动语义、继承与虚函数多态、抽象类与接口、运算符重载、友元函数等关键知识点,同时结合单例模式、工厂模式、观察者模式、策略模式等常用设计模式的 C++ 实现,帮助开发者写出结构清晰、易于维护的面向对象代码。

304

2026.04.09

Java 面向对象与核心编程机制
Java 面向对象与核心编程机制

系统讲解 Java 面向对象编程的核心知识体系,涵盖类的定义与封装、构造方法与 this/super 关键字、继承与方法重写、多态与向上向下转型、抽象类与接口的区别与设计原则、异常处理机制(try-catch-finally / 自定义异常)、泛型的类型参数与通配符、集合框架(List/Set/Map)的使用与遍历方式,帮助开发者全面掌握 Java 程序设计的核心机制与面向对象思维。

203

2026.04.17

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

315

2025.11.27

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

160

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn