白骑士的JavaScript教学进阶篇之原型与继承 3.1.2 继承的实现(ES5与ES6)

Java后端技术学习体系—韩顺平 文章目录第一部分:Java基础变量、控制结构、OOP(封装,继承,多态)、数组、Java API、异常和处理、集合、泛型、IO、反射、网络通信第二部分:Java高级1. Java多线程/高并发1.1 并发基础互斥同步、非阻塞同步、指令重排、synchronized、 volatile1.2 线程1.3 锁自动锁、偏向锁、可重入锁1.4 线程池1.5 并发容器1.6 JUCexecutor、collections、locks、alomic(原子类)、tools2. 数据结构和算法2.1 数据结构数组(数组问题 阅读详情

        继承是面向对象编程中的一个重要概念,它允许一个对象基于另一个对象来创建,并继承其属性和方法。JavaScript中的继承是通过原型链实现的,但在不同的版本中,继承的实现方式有所不同。传统上(ES5),JavaScript通过原型和构造函数来实现继承,而在ES6中,引入了 ‘class‘ 语法,使得继承变得更加直观和易于使用。在本节中,我们将详细探讨如何在ES5和ES6中实现继承,帮助你理解这两种实现方式的异同,并在实际开发中选择适合的方案。

ES5中的继承

        在ES5中,继承是通过构造函数和原型链手动实现的。主要步骤包括:定义父构造函数,创建子构造函数,设置子构造函数的原型为父构造函数的实例,并确保子构造函数的 ‘constructor‘ 指向自身。

定义父构造函数

        父构造函数通常包含父类的属性和方法。

示例

function Animal(name) {
    this.name = name;
}

Animal.prototype.speak = function() {
    console.log(this.name + ' makes a sound.');
};

        在这个示例中,‘Animal‘ 构造函数定义了一个 ‘name‘ 属性,并且在 ‘Animal.prototype‘ 上定义了一个 ‘speak‘ 方法。

创建子构造函数

        子构造函数继承父构造函数的属性,并可以定义自己的属性和方法。

示例

function Dog(name, breed) {
    Animal.call(this, name); // 继承父类的属性
    this.breed = breed;
}

        在这个示例中,‘Dog‘ 构造函数通过 ‘Animal.call(this, name)‘ 调用了父构造函数,继承了 ‘name‘ 属性,同时 ‘Dog‘ 自己也定义了一个 ‘breed‘ 属性。

设置原型链

        为了让子构造函数继承父构造函数的方法,需要将子构造函数的原型设置为父构造函数的实例,并确保 ‘constructor‘ 指向子构造函数本身。

示例

Dog.prototype = Object.create(Animal.prototype); // 设置原型链
Dog.prototype.constructor = Dog; // 修正 constructor 的指向

Dog.prototype.speak = function() {
    console.log(this.name + ' barks.');
};

        在这个示例中,‘Dog.prototype‘ 被设置为 ‘Animal.prototype‘ 的一个新实例,这意味着 ‘Dog‘ 实例可以访问 ‘Animal‘ 的方法。我们还通过 ‘Dog.prototype.constructor = Dog;‘ 确保 ‘constructor‘ 指向正确的构造函数。

使用子类

示例

let myDog = new Dog('Rex', 'German Shepherd');
myDog.speak(); // 输出: Rex barks.

        在这个示例中,‘myDog‘ 是 ‘Dog‘ 类的实例,并继承了 ‘Animal‘ 类的 ‘speak‘ 方法。由于我们在 ‘Dog.prototype‘ 上重新定义了 ‘speak‘ 方法,所以它会覆盖 ‘Animal.prototype.speak‘,输出“Rex barks”。

ES6中的继承

        ES6引入了 ‘class‘ 语法,使得定义类和实现继承变得更加简洁和易于理解。‘class‘ 语法背后依然是基于原型的继承机制,但语法上更贴近传统面向对象编程的语言如Java、C++等。

定义父类

        在ES6中,父类通过 ‘class‘ 关键字定义,类似于传统的构造函数。

示例

class Animal {
    constructor(name) {
        this.name = name;
    }

    speak() {
        console.log(‘${this.name} makes a sound.‘);
    }
}

        在这个示例中,‘Animal‘ 类定义了一个 ‘constructor‘ 方法来初始化 ‘name‘ 属性,并且有一个 ‘speak‘ 方法。

创建子类

        在ES6中,子类通过 ‘extends‘ 关键字继承父类。子类可以调用父类的 ‘constructor‘ 方法来继承父类的属性,并可以定义自己的属性和方法。

示例

class Dog extends Animal {
    constructor(name, breed) {
        super(name); // 调用父类的 constructor 方法
        this.breed = breed;
    }

    speak() {
        console.log(‘${this.name} barks.‘);
    }
}

        在这个示例中,‘Dog‘ 类继承了 ‘Animal‘ 类。‘super(name)‘ 调用了父类的构造函数,并传递了 ‘name‘ 参数,同时 ‘Dog‘ 类还增加了一个 ‘breed‘ 属性。‘speak‘ 方法在 ‘Dog‘ 类中被重新定义,覆盖了父类的实现。

使用子类

示例

let myDog = new Dog('Rex', 'German Shepherd');
myDog.speak(); // 输出: Rex barks.

        在这个示例中,‘myDog‘ 是 ‘Dog‘ 类的实例,继承了 ‘Animal‘ 类的属性和方法,同时还拥有 ‘Dog‘ 类特有的行为。

ES5与ES6继承的对比

        虽然ES5和ES6实现继承的机制本质上相同,但ES6的 ‘class‘ 语法提供了更清晰、更简洁的方式来定义和使用继承。

  • 语法简洁:ES6通过 ‘class‘ 和 ‘extends‘ 关键字大大简化了类的定义和继承过程,而ES5需要手动处理原型链和 ‘constructor‘ 的指向。
  • 可读性更强:ES6的语法更贴近传统面向对象编程语言,使得代码更加易读和易于维护。
  • 原型链控制更简便:在ES5中,需要手动设置原型链并修正 ‘constructor‘ 的指向,而ES6则自动处理这些细节,使得代码更加规范。

总结

        理解JavaScript中的继承机制,无论是在ES5还是ES6中,都对于掌握JavaScript面向对象编程至关重要。ES6的 ‘class‘ 语法简化了继承的实现,提升了代码的可读性和开发效率。在现代JavaScript开发中,推荐使用ES6的继承语法,以便更好地组织代码结构,提升代码质量。通过深入掌握这两种继承方式,你将能够在不同的项目需求中灵活应用,编写更具扩展性和维护性的代码。

AI游戏生成技术解析:从自然语言到可玩游戏的实现原理 自然语言处理技术通过理解用户输入的文本描述,将其转化为结构化的游戏设计意图,这是现代AI应用开发的基础能力。其技术原理基于大语言模型的语义理解和代码生成能力,结合游戏引擎的实时渲染技术,实现从文本到交互体验的自动转换。这种技术的核心价值在于大幅降低内容创作门槛,让非专业开发者也能快速实现游戏创意。在游戏开发、教育应用、快速原型设计等场景中,AI生成技术展现出巨大潜力。以Meta Pocket为代表的vibe-coded游戏生成平台,正是这一技术的典型应用,通过提示词工程和自动化代码生成,实现了自然语言到可玩 阅读详情

相关推荐

OpenSees入门指南:从零开始的环境配置与TCL脚本实战

本文提供了一份详细的OpenSees入门指南,涵盖从零开始的环境配置到TCL脚本实战的全过程。文章重点讲解了OpenSees的安装步骤、环境变量设置,并推荐了高效的VS Code集成开发环境配置方法。通过一个简支梁分析的完整TCL脚本示例,手把手引导读者完成第一个非线性有限元分析,帮助土木工程与结构工程领域的研究者与学生快速上手这一强大的开源分析工具。

weixin_28829339的博客 336

白骑士的javaScript教学目录

白骑士的javaScript教学目录,点击超链接跳转对应文章

JeremyTC的博客 1033

deepfake detection数据集

最全Deepfake数据集总结,包含各个数据集下载链接: https://github.com/deepfakeinthewild/deepfake_in_the_wild Dataset name Download Generate method Deepfake videos Actors Deepfake-TIMIT low download De...

where_is_horse的博客 1万+

白骑士的JavaScript教学高级篇之面向对象编程 4.2.3 类的静态属性与方法

在JavaScript中,类不仅可以包含实例属性和方法,还可以定义静态属性和方法。静态属性和方法属于类本身,而不是类的实例。理解静态属性与方法的使用场景和它们与实例成员的区别,是深入掌握面向对象编程的重要步骤。

JeremyTC的博客 1063

【软碟通 | UltraISO】刻录光盘教程(制作U盘启动盘)

前言 今天老师说办公室的电脑有点卡,让我给重新安装一个 Windows 7 系统。于是就用软碟通(UltraISO)在 U 盘上刻录了一个 Windows 7 镜像,然后给老师重装了系统。顺便把制作 U 盘启动盘的教程也分享给大家。 软件 UltraISO v9.7.1.3519:点击跳转(密码:dd2k) 教程 将 U 盘插到电脑上,然后鼠标右击选择格式化(制作启动盘必须格式化) 点击文件-打开 选择下载好的系统镜像(如:Windows 7) 点击启动-写入硬盘映像 选择硬盘

XavierJ的博客 2万+

DESeq2实战:利用LRT检验解析时间序列基因表达动态变化

本文详细介绍了如何使用DESeq2中的LRT检验分析时间序列基因表达数据,揭示基因表达动态变化模式。通过构建完整模型与简化模型比较,LRT检验能有效识别处理效应随时间变化的基因,适用于发育过程、疾病进展等研究。文章提供了从数据准备、模型构建到结果可视化的完整实战指南,并分享了高级技巧与常见问题排查方法。

weixin_29062671的博客 439

白骑士的JavaScript教学语法基础篇之函数 2.4.2 函数表达式与箭头函数

在JavaScript中,函数不仅可以通过传统的声明方式定义,还可以通过函数表达式或箭头函数进行定义。这些方式各有特点,适用于不同的编程场景。了解并灵活运用它们,将大大提高代码的灵活性和简洁性。

JeremyTC的博客 914

XCP实战系列介绍09-基于Vehicle Spy进行XCP测量步骤详解

详细介绍如何使用Vehicle Spy进行XCP测量

initiallizer的博客 1393

ip雷达3.0_本周在我们的雷达上:轻松如1.0、2.0、3.0

ip雷达3.0Welcome to On Our Radar, a weekly round-up of news, trends and other cool stuff from the world of web development. 欢迎来到On Our Ra​​dar,每周综述来自Web开发领域的新闻,趋势和其他有趣的内容。 Gmail收件箱和设计原则 (Inbox by Gma...

culh2177的博客 445

R语言导入.dta文件实战

R语言导入.dta文件实战 #导入.dta文件的基本语法 R的导入.dta文件最简单方法是使用haven库中的read_dta()函数。 此函数使用以下基本语法: data <- read_dta('C:/you-path/file_name.dta') #包的安装和导入 install.packages('haven') library(haven) #下载.dta数据文件 我们将从该页面下载名为cola.dta的.dta文件。 #导入.dta文件 ..

data+scenario+science+insight 1万+

VLA仿真平台:Isaac sim、MuJoCo

在虚拟仿真领域,VLA(Virtual Learning Agent)仿真器是用于开发和训练虚拟机器人代理的环境,它们为机器人提供了一个平台来进行各种任务的模拟和学习,特别是在强化学习(RL)中。两款广泛应用的仿真器是和。这两者各有其特点和优势,适用于不同类型的机器人研究和开发。

u013250861的博客 863

JavaScript概述

ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScript,这个版本就是1.0版。 该标准一开始就是针对Ja...

weixin_30268071的博客 261

Python基础语法与最佳实践【python基础篇】

本文全面介绍了Python基础语法与最佳实践,涵盖变量与数据类型、控制流、函数、模块与包等核心概念。通过实际代码示例展示了条件语句、循环结构、函数定义及模块导入的基本用法。在最佳实践部分,重点讲解了PEP 8代码风格规范、异常处理技巧、列表推导式、上下文管理器、文档字符串编写以及enumerate和zip的高效使用。这些内容既适合Python初学者掌握基础语法,也能帮助有经验的开发者编写更规范、高效、可维护的代码。文章强调遵循Python官方推荐实践,通过合理运用语言特性提升代码质量。

博客 1977

前端js

Javascript学习 JavaScript概述   ECMAScript和JavaScript的关系     1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的...

weixin_30699955的博客 108

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

前端JS

Javascript学习 JavaScript概述 ECMAScript和JavaScript的关系     1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScr...

bansheng8492的博客 193

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

day 46 Javascript学习

Javascript学习 JavaScript概述   ECMAScript和JavaScript的关系     1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了...

deng6648的博客 118

JavaScript 引入方式 语言规范 语言基础 数据类型 常用方法 数组 if_else 比较运算符 for while 函数 函数的全局变量和局部变量 {Java...

Javascript学习 JavaScript概述   ECMAScript和JavaScript的关系     1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本...

weixin_34304013的博客 252

源于老师的博客

Javascript学习 老师的博客 JavaScript概述   ECMAScript和JavaScript的关系     1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-2...

ahmot46880的专栏 262

PhantomJS无头浏览器:从核心原理到爬虫实战与替代方案

无头浏览器是一种没有图形用户界面的浏览器,能够在后台完整加载网页、执行JavaScript并渲染页面。其核心原理基于浏览器渲染引擎(如WebKit),通过脚本控制实现网络请求、DOM构建、CSS应用和JavaScript执行等完整流程。这项技术的核心价值在于解决了传统网络爬虫无法处理动态渲染页面的痛点,为数据采集、自动化测试和网页监控提供了强大支持。在工程实践中,无头浏览器广泛应用于爬取单页应用数据、生成网页截图与PDF、以及自动化功能测试等场景。以PhantomJS为例,这款基于WebKit内核的工具曾通

weixin_33978044的博客 393

Java学习路线

学习路线java

qq_25355771的博客 767

javasript

ECMAScript和JavaScript的关系     1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScript,这个版本就是1.0版。     该标准一开始就是针...

weixin_30247307的博客 168

ACP考前错题总结(精华,已过ACP)

前言 证书和战绩镇楼,希望大家都可以拿到自己想要的Certificate。无论ACA-ACP-ACE亦或者GCP、AWS等等。 错题总结 镜像、本地磁盘部分 不建议基于本地服务器制作镜像上传到阿里云ECS并提供服务。 不支持写在座位数据盘使用的本地盘 镜像和快照:镜像可以复制镜像实现用户跨地域迁盘,直接创建ECS,一定包含系统盘;快照只能跨可用区迁盘,多用于备份,可以是系统盘或者数据盘。 磁盘序号,只支持新建磁盘,已创建过得磁盘不具备该特性。 本地快照实现高IO云盘数据备份。 本地磁盘或者本地SSD创建

★【World Of Moshow 郑锴】★ 2421

所有博客导航

。。

nameofcsdn的博客 1万+

Cocos基础概念知识

【架构透视与数据流向图解】Cocos Creator 3.x 引入了高度可定制的现代渲染管线(Render Pipeline),支持跨平台的高性能图形渲染。其工作原理可以抽象为一个从“逻辑数据”到“屏幕像素”的数据流转换过程。【工作原理数据流图】场景图 (Scene Graph)➔渲染收集 (RenderFlow)➔渲染队列 (RenderQueue)➔渲染管线 (RenderPipeline)➔图形 API (WebGL/Vulkan)1. 场景漫游与数据收集(RenderFlow)

qq_52269550的博客 562

Web 版翻译者资料库

本项目是桌面版《翻译者资料库》的 Web 移植版,基于 Spring Boot 3.3、Thymeleaf、Bootstrap 5.3 与 MySQL 8.0 构建。它面向翻译写作提供资料、词汇、句库、文本工具、对照制作、查找、备份恢复及旧库迁移等功能,完整继承桌面版核心业务规则,支持一键启动与离线访问。

howard2005的专栏 145
上一篇: 白骑士的JavaScript教学进阶篇之原型与继承 3.1.1 原型链的概念
下一篇: 白骑士的JavaScript教学进阶篇之异步编程 3.2.1 回调函数
白骑士所长
博客等级 码龄6年 3841粉丝 362原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白骑士所长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值