JavaScript中的构造函数是什么,如何使用ES6中的类来进行构造函数的封装和继承?

目录

学习目标:

学习内容:

学习时间:

学习讲解:

深入对象

创建对象三种方式

构造函数

练习 

实例化执行过程

说明:1. 创建新对象2. 构造函数this指向新对象3. 执行构造函数代码,修改this,添加新的属性4. 返回新对象​编辑

实例成员&静态成员 

内置构造函数

• Object

• Array

练习​编辑

​编辑

• String

练习:

• Number

综合案例


学习目标:

  1. 掌握基于构造函数创建对象,理解实例化过程
  2. 掌握对象数组字符数字等类型的常见属性和方法,便捷完成功能
     

学习内容:

  1. 深入对象
  2. 内置构造函数
  3. 综合案例
     

学习时间:

这里可以根据你们自己时间进行学习

  • 周一至周五晚上 7 点—晚上9点
  • 周六上午 9 点-上午 11 点
  • 周日下午 3 点-下午 6 点

学习讲解:

深入对象

  • 创建对象三种方式

目标:了解创建对象有三种方式
1. 利用对象字面量创建对象

 

2. 利用 new Object 创建对象


3. 利用构造函数创建对象

构造函数

 
目标:能够利用构造函数创建对象
 构造函数 :是一种特殊的函数,主要用来初始化对象
 使用场景:常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象,继续创建乔治的对象还需要重新写一
遍,此时可以通过构造函数来快速创建多个类似的对象。

在 JavaScript 中,构造函数是一种特殊的函数,它可以用来创建对象。构造函数的定义方式与普通函数相同,但约定构造函数的名称应该以大写字母开头,以便与普通函数区分开来。

构造函数通常用于定义一种对象类型,该类型具有某些共同的特征和行为。当我们创建一个对象时,可以使用构造函数来初始化对象的属性和方法,这样可以确保对象的特征和行为始终保持一致。

下面是一个简单的构造函数示例:

// 定义构造函数
function Person(name, age, gender) {
  this.name = name;
  this.age = age;
  this.gender = gender;

  this.getInfo = function() {
    return `${this.name} is a ${this.age}-year-old ${this.gender}.`;
  };
}

// 创建对象实例
let person1 = new Person("John", 30, "male");
let person2 = new Person("Jane", 25, "female");

// 输出对象属性和方法
console.log(person1.name); // 输出 "John"
console.log(person2.getInfo()); // 输出 "Jane is a 25-year-old female."

在这个例子中,我们定义了一个名为 Person 的构造函数,它有三个参数:nameagegender。在构造函数中使用 this 关键字定义对象的属性和方法。然后,我们可以使用 new 关键字来创建两个 Person 对象,即 person1person2,并将参数传递给构造函数。最后,我们可以使用点号语法来访问对象的属性和方法,比如调用 getInfo 方法。

总的来说,构造函数是一种创建对象的方法,它通常用于定义一种对象类型,并在对象创建时初始化对象的属性和方法。

构造函数在技术上是常规函数。
不过有两个约定:
1. 它们的命名以大写字母开头。
2. 它们只能由 "new" 操作符来执行。
 

说明:
1. 使用 new 关键字调用函数的行为被称为实例化
2. 实例化构造函数时没有参数时可以省略 ()
3. 构造函数内部无需写return,返回值即为新创建的对象
4. 构造函数内部的 return 返回的值无效,所以不要写return
5. new Object() new Date() 也是实例化构造函数

练习 

需求:
①:写一个Goods构造函数
②:里面包含属性 name 商品名称 price 价格 count 库存数量
③:实例化多个商品对象,并打印到控制台,例如
苹果 1999 20 
香蕉 3999 59 
橘子 1888 100

实例化执行过程

说明:
1. 创建新对象
2. 构造函数this指向新对象
3. 执行构造函数代码,修改this,添加新的属性
4. 返回新对象

实例成员&静态成员
 

在 JavaScript 中,成员可以分为实例成员和静态成员。

实例成员是指在创建对象时,每个对象都有自己独立的属性和方法。每个对象的属性和方法的值都是独立的,互相之间不会影响。

静态成员是指在创建对象时,所有对象都共享的属性和方法。所有对象的静态属性和方法的值都相同,互相之间互相影响。

下面的示例演示了如何在 JavaScript 中创建实例成员和静态成员:

// 构造函数
function MyClass(name) {
  // 实例属性
  this.name = name;

  // 实例方法
  this.getName = function() {
    return this.name;
  }
}

// 静态属性
MyClass.count = 0;

// 静态方法
MyClass.showCount = function() {
  return this.count;
}

// 创建对象实例
let obj1 = new MyClass("John");
let obj2 = new MyClass("Jane");

// 访问实例属性和方法
console.log(obj1.name); // 输出 "John"
console.log(obj2.getName()); // 输出 "Jane"

// 访问静态属性和方法
console.log(MyClass.count); // 输出 0
console.log(MyClass.showCount()); // 输出 0

在这个例子中,我们定义了一个名为 MyClass 的构造函数,并在构造函数中定义了一个实例属性 name 和一个实例方法 getName。然后,我们在构造函数外部定义了一个静态属性 count 和一个静态方法 showCount。最后,我们创建了两个对象实例,并分别访问了它们的实例属性和方法,以及访问了静态属性和方法。

总的来说,实例成员是每个对象独立的属性和方法,而静态成员是所有对象共享的属性和方法。在实际开发中,我们可以根据需求选择合适的成员类型来实现面向对象编程。

总结:

什么是实例成员?
 实例对象的属性和方法即为实例成员
2. 什么是静态成员?
 构造函数的属性和方法被称为静态成员

 

内置构造函数

• Object

在 JavaScript 中最主要的数据类型有 6 种:
基本数据类型:
 字符串、数值、布尔、undefined、null
引用类型: 
 对象
但是,我们会发现有些特殊情况:


其实字符串、数值、布尔、等基本类型也都有专门的构造函数,这些我们称为包装类型。
JS中几乎所有的数据都可以基于构成函数创建。

引用类型
 Object,Array,RegExp,Date 等
包装类型
 String,Number,Boolean 等

Object 是内置的构造函数,用于创建普通对象。
推荐使用字面量方式声明对象,而不是 Object 构造函数

学习三个常用静态方法(静态方法就是只有构造函数Object可以调用的)
 作用:Object.keys 静态方法获取对象中所有属性(键)
 语法:


 注意: 返回的是一个数组
 


• Array

Array 是内置的构造函数,用于创建数组


创建数组建议使用字面量创建,不用 Array构造函数创建

Array
1. 数组常见实例方法-核心方法

方法
 
作用
 
说明
 
forEach
 
遍历数组
 
不返回,用于不改变值,经常用于查找打印输出值
filter 
 
过滤数组筛选数组元素,并生成新数组
 
map 
 
迭代数组
 
返回新数组,新数组里面的元素是处理之后的值,经常用于处理数据
 
reduce
 
累计器返回函数累计处理的结果,经常用于求和等
 

 

  • concat():连接两个或更多的数组,并返回新数组。
  • join():把数组的所有元素放入一个字符串。
  • pop():删除并返回数组的最后一个元素。
  • push():向数组的末尾添加一个或更多元素,并返回新的长度。
  • shift():删除并返回数组的第一个元素。
  • unshift():向数组的开头添加一个或更多元素,并返回新的长度。
  • slice():从指定的开始索引开始提取若干个元素。
  • splice():删除元素,并向数组添加新元素。
var arr1 = [1, 2, 3];
var arr2 = [4, 5, 6];

var arr3 = arr1.concat(arr2); // [1, 2, 3, 4, 5, 6]

var arr4 = arr3.join(','); // "1,2,3,4,5,6"

var last = arr4.pop(); // "6", arr4 变成了 [1, 2, 3, 4, 5]

arr4.push(6); // arr4 变成了 [1, 2, 3, 4, 5, 6]

var first = arr4.shift(); // 1, arr4 变成了 [2, 3, 4, 5, 6]

arr4.unshift(1); // arr4 变成了 [1, 2, 3, 4, 5, 6]

var arr5 = arr4.slice(1, 4); // [2, 3, 4]

var removed = arr4.splice(2, 1, 9, 10); // 返回 [3],arr4 变成了 [1, 2, 9, 10, 4, 5, 6]
 

数组常见的方法-其他方法

练习

• String

在 JavaScript 中的字符串、数值、布尔具有对象的使用特征,如具有属性和方法


之所以具有对象特征的原因是字符串、数值、布尔类型数据是 JavaScript 底层使用 Object 构造函数“包装”来的,被
称为包装类型

练习:

显示赠品练习

思路:
①:把字符串拆分为数组,这样两个赠品就拆分开了 用那个split(‘,)
②:利用map遍历数组,同时把数组元素生成到span里面,并且返回
③:因为返回的是数组,所以需要 转换为字符串, join()
④:p的innerHTML 存放刚才的返回值
 


• Number

Number 是内置的构造函数,用于创建数值
常用方法:
toFixed() 设置保留小数位的长度

  • 综合案例

购物车展示
需求:
根据后台提供的数据,渲染购物车页面


 

 分析业务模块:
①:渲染图片、标题、颜色、价格、赠品等数据
②:单价和小计模块
③:总价模块

分析业务模块:
①:把整体的结构直接生成然后渲染到大盒子.list 里面
②:那个方法可以遍历的同时还有返回值
③:最后计算总价模块,那个方法可以求和?
map 方法
reduce 方法
分析业务模块:
①:先利用map来遍历,有多少条数据,渲染多少相同商品
②:里面更换各种数据,注意使用对象解构赋值
③:利用reduce计算总价
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/240896.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt使用Cryptopp生成HMAC-MD5

近期项目中HTTPS通讯中,token需要使用HMAC-MD5算法生成,往上找了一些资料后,仍不能满足自身需求,故次一记。 前期准备: ①下载Cryptopp库(我下载的是8.8.0 Release版本):Crypto Li…

搬运机器人行业分析:中国市场销量已达到6.3万台左右

近年来,随着我国人口红利的逐渐消失,企业用工成本不断上涨,各种工业机器人获得了广泛的应用。焊接、装配、切割、分拣、搬运等机器人的出现,不仅通过“机器换人”解放了企业和行业的生产力,更推动了产业发展由劳动密集…

2012r2无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll。测试成功,完美解决。

2012r2修复api-ms-win-crt-runtime-l1-1-0.dll资源-CSDN文库csdn的下载地址 若要开始下载,请单击“下载”按钮,然后执行以下操作之一,或者从“更改语言”中选择另一种语言,然后单击“更改”。 单击“运行”立即开始安装。单击“保…

[C++] 继承

文章目录 1、继承的概念及定义1.1 继承的概念1.2 继承的定义1.2.1 定义格式1.2.2 继承关系和访问限定符1.2.3 继承基类成员访问方式的变化 2、基类和派生类对象赋值转换3、继承中的作用域4、派生类的默认成员函数5、继承与友元6、继承与静态成员7、菱形继承,菱形虚拟…

Qt提升绘制效率,绘制加速。

在我们绘制一些复杂逻辑且数据量巨大的图形时,经常会出现流畅性问题,本文就是来进行讲解如何提升绘制效率的。 实现思路: 场景1:我们绘制多个静态图形和绘制一张图片哪个更快。很明显绘制多个图形的时候要慢很多。所以我们将多个图…

K8S(一)—安装部署

目录 安装部署前提以下的操作指导(在master)之前都是三台机器都需要执行 安装docker服务下面的操作仅在k8smaster执行 安装部署 前提 以下的操作指导(在master)之前都是三台机器都需要执行 关闭防火墙 [rootk8smaster ~]# vim /etc/selinux/config [rootk8smaster ~]# swa…

深入源码解析ArrayList:探秘Java动态数组的机制与性能

文章目录 一、 简介ArrayList1.1 介绍ArrayList的基本概念和作用1.2 与数组的区别和优势 二、 内部实现2.1 数据结构:动态数组2.2 添加元素:add()方法的实现原理2.3 扩容机制:ensureCapacity()方法的实现原理 三、 常见操作分析3.1 获取元素&…

Postswigger 靶场 XSS 通关

文章目录 PostSwigger靶场XSS通关学徒:第一关学徒:第二关学徒:第三关学徒:第四关学徒:第五关学徒:第六关学徒:第七关学徒:第八关学徒:第九关 PostSwigger靶场XSS通关 靶…

2023_Spark_实验二十六:编写Shell模拟生成点击实时数据

引言:流式数据处理主要处理实时数据,由于实验教学过程中,每个同学无法拿到实时数据,因此我们开发shell脚本模拟实时数据生成,支持后续实验。 实验目的:通过开发模拟实时点击流shell脚本,模拟实时…

<JavaEE> 经典设计模式之 -- 线程池

目录 一、线程池的概念 二、Java 标准库中的线程池类 2.1 ThreadPoolExecutor 类 2.1.1 corePoolSize 和 maximumPoolSize 2.1.2 keepAliveTime 和 unit 2.1.3 workQueue 2.1.4 threadFactory 2.1.5 handler 2.1.6 创建一个参数自定义的线程池 2.2 Executors 类 2.3…

java答题小程序源码带后台

尊敬的客户大家好!接下来由我来介绍一下晟讯答题小程序,晟讯答题小程序是一款专业性的答题小程序,技术方式为前端原生开发的小程序,服务端为java程序,且拥有独立知识产权,软著登字2019SR0657453。其功能集个…

全球化表达:TikTok在文化交流中的崭露头角

TikTok,这一短视频平台自问世以来,迅速蔓延至全球,成为年轻一代创意表达的热门平台。其简便易用的特性和多元创作方式使得TikTok在全球范围内崭露头角。本文将深入探讨TikTok在文化交流中的作用,以及它在全球化表达方面的独特之处…

解决RuntimeError: CUDA error: invalid device ordinal

步骤 首先查看自己设备的cuda版本 #如下linux指令都可以,主要还是以nvidia-smi为主 nvidia-smi nvcc -V用的python版本是3.8 torch版本用的1.12.1cu113 torch网址:https://pytorch.org/get-started/previous-versions/ 安装完后发现出现如下问题&#…

蓝桥杯小白赛第一场(1~6)(期望DP)

1、模拟 2、贪心 3、前缀和 4、猜结论 5、双指针 6、期望DP 1. 蘑菇炸弹 思路&#xff1a;一个简单的暴力模拟。 #include <bits/stdc.h> using namespace std; int main() {int n;cin >> n;vector<int>a(n , 0);for(int i 0 ; i < n ; i )cin &…

深度学习中的各类评价指标

深度学习中的各类评价指标 1 Dice Loss2 Precision&#xff08;精度&#xff09;3 Recall&#xff08;召回率&#xff09;4 F-Score5 mAP 1 Dice Loss Dice Loss&#xff0c;也叫Soft Dice Coefficient&#xff0c;是一种用于图像分割任务的损失函数。它基于目标分割图像与模型…

分库分表,可能真的要退出历史舞台了!

即使是不懂编程的玩家&#xff0c;在对比 NAS 的时候&#xff0c;也会两眼放光&#xff0c;考虑很多因素&#xff0c;比如 RAID 级别、速度、易用程度等。作为时时刻刻与代码打交道的我们&#xff0c;更需要关注数据的存取问题。 一开始&#xff0c;开箱即用的 MySQL&#xff0…

AI一键生成增删改查代码

AI一键生成增删改查代码 在线体验&#xff1a;体验地址 使用教程 1. 描述需求 准确清晰的描述你的需求&#xff0c;如&#xff1a;基于RBAC模型的权限管理系统&#xff0c;点击AI图标 2. AI生成SQL语句 AI将根据你的需求描述生成SQL语句 CREATE TABLE users (id INT A…

高危性行为感染HPV几率有多大?谭巍主任阐述三大要点

高危性行为是指与多个性伴侣发生性行为&#xff0c;或者与性伴侣发生无保护措施的性行为。这些行为增加了感染性传播疾病的风险&#xff0c;包括人乳头瘤病毒(HPV)。 一、HPV感染的风险 1. 性伴侣数量&#xff1a;性伴侣数量越多&#xff0c;感染HPV的几率就越高。与多个性伴…

2023年AMC8数学竞赛真题的典型考点和解析

现在距离2024年1月19日的AMC8数学竞赛还有一个多月的时间&#xff0c;最后一个多月的时间&#xff0c;六分成长建议在前期知识点和内容体系都比较熟悉的基础上&#xff0c;以刷真题为主。同时通过刷真题的查漏补缺&#xff0c;补齐短板。 如何提高刷真题的效率呢&#xff1f;当…

数据结构之----二叉树、二叉树遍历、二叉树数组表示、二叉搜索树

数据结构之----二叉树、二叉树遍历、二叉树数组表示、二叉搜索树 什么是二叉树&#xff1f; 二叉树是一种非线性数据结构&#xff0c;代表着祖先与后代之间的派生关系&#xff0c;体现着“一分为二”的分治逻辑。 与链表类似&#xff0c;二叉树的基本单元是节点&#xff0c;每…