发布时间:2026/7/30 18:28:27
JS面向对象详解 本文详细介绍JS面向对象。本文目录1. 基于原型的继承2. 构造函数3. ES6 类语法4. 静态方法和属性5. 访问器属性6. 继承与多态7. 组合与混入8. 私有属性和方法1. 基于原型的继承JavaScript 中每个对象都有一个内部属性[[Prototype]]指向它的原型对象。当访问一个对象的属性时JavaScript 会先在对象本身查找找不到则沿着原型链向上查找。// 创建原型对象constanimalPrototype{speak(){console.log(${this.name}makes a sound.);}};// 创建对象并指定原型constdogObject.create(animalPrototype);dog.nameBuddy;dog.speak();// Buddy makes a sound.// 检查原型关系console.log(Object.getPrototypeOf(dog)animalPrototype);// true2. 构造函数传统的创建对象和实现继承的方式// 构造函数functionAnimal(name){this.namename;}// 原型方法Animal.prototype.speakfunction(){console.log(${this.name}makes a sound.);};// 子类构造函数functionDog(name,breed){Animal.call(this,name);// 继承属性this.breedbreed;}// 继承原型方法Dog.prototypeObject.create(Animal.prototype);Dog.prototype.constructorDog;// 子类方法Dog.prototype.barkfunction(){console.log(${this.name}barks!);};constdognewDog(Buddy,Labrador);dog.speak();// Buddy makes a sound.dog.bark();// Buddy barks!3. ES6 类语法ES6 引入的class是构造函数的语法糖提供更简洁的写法// 基类classAnimal{constructor(name){this.namename;}speak(){console.log(${this.name}makes a sound.);}}// 子类classDogextendsAnimal{constructor(name,breed){super(name);// 调用父类构造函数this.breedbreed;}bark(){console.log(${this.name}barks!);}}constdognewDog(Buddy,Labrador);dog.speak();// Buddy makes a sound.dog.bark();// Buddy barks!4. 静态方法和属性属于类本身而非实例的方法和属性classMathUtils{staticPI3.14;staticsum(a,b){returnab;}}console.log(MathUtils.PI);// 3.14console.log(MathUtils.sum(2,3));// 5constutilsnewMathUtils();// utils.sum(2, 3); // 报错实例无法访问静态方法5. 访问器属性控制属性的读取和设置行为classPerson{constructor(firstName,lastName){this._firstNamefirstName;this._lastNamelastName;}// 访问器属性getfullName(){return${this._firstName}${this._lastName};}setfullName(value){const[firstName,lastName]value.split( );this._firstNamefirstName;this._lastNamelastName;}}constpersonnewPerson(John,Doe);console.log(person.fullName);// John Doeperson.fullNameJane Smith;console.log(person._firstName);// Jane6. 继承与多态JavaScript 支持单继承一个子类只能有一个父类但通过原型链和组合可以实现复杂的继承关系// 多态示例classShape{getArea(){return0;// 默认实现}}classCircleextendsShape{constructor(radius){super();this.radiusradius;}getArea(){returnMath.PI*this.radius**2;// 重写方法}}classRectangleextendsShape{constructor(width,height){super();this.widthwidth;this.heightheight;}getArea(){returnthis.width*this.height;// 重写方法}}functionprintArea(shape){console.log(Area:${shape.getArea()});// 多态调用}printArea(newCircle(5));// Area: 78.5398163397448printArea(newRectangle(4,5));// Area: 207. 组合与混入组合是比继承更灵活的代码复用方式// 混入对象constFlyable{fly(){console.log(Flying...);}};constSwimmable{swim(){console.log(Swimming...);}};// 使用组合而非继承classDuck{constructor(){Object.assign(this,Flyable,Swimmable);// 混入功能}quack(){console.log(Quack!);}}constducknewDuck();duck.fly();// Flying...duck.swim();// Swimming...duck.quack();// Quack!8. 私有属性和方法ES2022 引入了私有字段Private Fields语法classBankAccount{#balance0;// 私有属性constructor(initialBalance){this.#balanceinitialBalance;}#validateAmount(amount){// 私有方法returnamount0;}deposit(amount){if(this.#validateAmount(amount)){this.#balanceamount;}}getBalance(){returnthis.#balance;}}constaccountnewBankAccount(1000);account.deposit(500);console.log(account.getBalance());// 1500// console.log(account.#balance); // 报错无法访问私有属性← 上一篇 AngularJS知识快速入门上记得点赞、关注、收藏哦下一篇 Ajax——在OA系统提升性能的局部刷新 →

相关新闻

2026/7/30 18:28:27

JavaScript 构造函数详细解析

本文详细介绍JavaScript构造函数。 本文目录1. 基本构造函数2. 构造函数的工作原理3. 原型与构造函数4. 实例属性 vs 原型属性5. 构造函数的继承6. 构造函数与类的关系7. 静态方法与属性8. 构造函数的问题与优化构造函数 vs 工厂函数1. 基本构造函数 通过 new 关键字调用的函数…

2026/7/30 18:28:27

Docker实战 | 使用Docker部署EasyNode服务器面板工具

Docker实战 | 使用Docker部署EasyNode服务器面板工具一、EasyNode介绍1.1 EasyNode简介1.2 EasyNode主要特点二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、拉取EasyNode镜像五、…

2026/7/30 19:23:56

如何在Mac上使用Xbox手柄:360Controller驱动终极指南

如何在Mac上使用Xbox手柄:360Controller驱动终极指南 【免费下载链接】360Controller TattieBogle Xbox 360 Driver (with improvements) 项目地址: https://gitcode.com/gh_mirrors/36/360Controller 想在Mac上畅玩支持手柄的游戏,却为Xbox手柄的…

2026/7/30 19:23:56

从零开始:如何用Docker轻松搭建Qlib量化投资平台

从零开始:如何用Docker轻松搭建Qlib量化投资平台 【免费下载链接】qlib Qlib is an AI-oriented Quant investment platform that aims to use AI tech to empower Quant Research, from exploring ideas to implementing productions. Qlib supports diverse ML mo…

2026/7/30 19:23:56

ComfyUI动作迁移终极指南:3步让AI完美复刻舞蹈与特效动作

ComfyUI动作迁移终极指南:3步让AI完美复刻舞蹈与特效动作 【免费下载链接】ComfyUI-MimicMotionWrapper 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-MimicMotionWrapper 你是否曾想过,让普通人跳出专业舞者的舞步?让动画角…

2026/7/30 19:23:56

BilibiliDown:让B站视频成为你的永久收藏,离线观看无压力!

BilibiliDown:让B站视频成为你的永久收藏,离线观看无压力! 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https:…

2026/7/30 19:23:56

Seq2Seq架构解析:从基础原理到现代应用

1. 项目概述:从Seq2Seq架构理解大模型基础第一次接触编码器-解码器架构是在2017年翻译任务中,当时被这种"先理解后生成"的机制惊艳到了。Seq2Seq(Sequence to Sequence)作为大语言模型的基础架构之一,其设计…

2026/7/29 22:32:30

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

2026/7/30 0:01:39

[GESP202606 四级] 扫雷

B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会(CCF)2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…

2026/7/30 0:01:39

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/29 13:12:43

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…