当前位置: 首页 > news >正文

JavaScript 进阶--charater3

文章目录

  • 前言
  • 一、编程思想
    • 1.1 面向过程介绍
    • 1.2 面向对象编程 (oop)
    • 对比
  • 二、构造函数
  • 三、原型
    • 3.1原型
    • 3.2 constructor 属性
    • 3.3 对象原型
    • 3.4 原型继承
    • 3.5 原型链
  • 总结


前言

🆑学习目标

  1. 理解面向对象思想,掌握函数原型对象
  2. 运用面向对象封装继承特点,封装确认框对话功能。

一、编程思想

1.1 面向过程介绍

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的 时候再一个一个的依次调用即可。
就是按照我们分析好步骤,按照步骤解决问题

1.2 面向对象编程 (oop)

面向对象是把事务分解成一个个对象,然后由对象之间分工与合作。
面向对象就是以对象功能来划分问题,而不是步骤。

  • 面向对象程序开发思想中,每个对象都是功能中心,具有明确分工。
  • 面向对象编程具有灵活,代码可复用,容易维护,和开发的优点,更合适多人合作的大型软件项目。

面向对象的特性:
封装性
继承性
多态性

对比

⭕️面向过程编程

优点:性能比面向对象高,适合跟硬件联系很紧密的东西。例如单片机采用的面向过程编程。
缺点:没有面向对象以维护,易复用,易扩展。

面向对象编程

优点:易维护,易复用,由于面向对象由封装,继承,多态的特性。可以设计出低耦合的系统,使系统更加灵活,更加易维护。
缺点:性能比面向过程低。

二、构造函数

  • 封装使面向对象思想中比较重要的一部分,js面向对象可以通过构造函数实现的封装。
  • 同样的将变量函数组合到一起并通过this实现数据的共享,所不同的使借助构造函数创建出来的实例对象之间是彼此不影响的。
// 构造函数  公共的属性和方法 封装到 Star 构造函数里面了// 1.公共的属性写到 构造函数里面function Star(uname, age) {this.uname = unamethis.age = agethis.sing = function () {console.log('唱歌')}}const ldh = new Star('刘德华', 55)const zxy = new Star('张学友', 58)ldh.sing() //调用zxy.sing() //调用

在这里插入图片描述
前面我们学过的构造函数方法很好用,但是存在浪费内存的问题。

 console.log(ldh === zxy)  // falseconsole.log(ldh.sing === zxy.sing) // true

三、原型

3.1原型

目标:能够利用原型对象实现方法共享

  • 构造函数通过原型分配的函数是所有对象所共享的
  • Javascript 规定,每一个构造函数都有一个prototype 属性,指向一个对象,所有也称为原型对象。
  • 这个对象可以挂载函数,对象实例化不会多次创建原型上函数,节约内存。
  • 把不变的方法,直接定义在prototype对象上,这样所有对象的实例化就可以共享这些方法`。
    在这里插入图片描述
    代码如下(示例):
Function Star(uname,age)this,uname=unamethis,age=age
console.log(Star.prototype)//返回一个对象称为原型对象
Star.prototype.sing function (){console.1og("我会唱歌)
}
const 1dh=new Star('刘德华'18)
const zxy=new5tar('张学友'19)
console.1og(ldh.sing == zxy.sing)
//结果是true说明俩函数一样,共享

3.2 constructor 属性

每一个原型对象都有一个constructor 属性 (constructor 构造函数

使用场景:如果有多个对象的方法,我们可以给原型对象采取对象形式赋值。但是这样会覆盖构造函数原型对象原来的内容。

function star(name){this.name=name
}
star.prototype = {//手动利用construtor 指向 starconstrutor : star// 如果不指向 就会默认指向object	console.log(star.prototype.constructor)//指向 objectsing : function()console.log("sing"),dance : function()console.log("dance")
}
console.log(star.prototype.constructor)//指向原型对象star

3.3 对象原型

🔥 思考
构造函数可以创建实例对象,构造函数还有一个原型对象,一些公共的属性或方法放到这个原型对象可以共享属性和方法?
:对象都会有一个属性_proto_ 指向构造函数的 prototype原型对象 ,因为对象有_proto_ 原型的存在。
在这里插入图片描述

 function Star() {}const ldh = new Star()// 对象原型__proto__ 指向 改构造函数的原型对象console.log(ldh.__proto__) // objectconsole.log(ldh.__proto__ === Star.prototype) // true// 对象原型里面有constructor 指向 构造函数 Starconsole.log(ldh.__proto__.constructor === Star) // true

❌注意

  1. _proto _ 是JS非标准属性
  2. [{prototype}] 和 proto 意义相同
  3. 用来表明当前实例对象指向哪个原型对象prototype
  4. proto 对象原型里面有一个constructor属性,指向创建该实例对象的构造函数

在这里插入图片描述

3.4 原型继承

通过继承进一步提升代码封装的程度,JavaScript大多是借助原型对象实现继承的特性。

    function Man(){this.head =1;this.eyes =2;this.legs =2;this.say =function (){}this.eat= function (){}} const pink= new Man()console.log(pink)// Man 对象

封装–抽取公共部分

  1. 让男人和女人都能继承人类的一些属性和方
  2. 把男人女人公共的属性和方法抽取出来 People
  3. 然后赋值给Man的原型对象,可以共享这些属性和方法
  4. 注意让constructor指回Man这个构造函数
     //人类const People ={head:1,eyes:2,legs:2,say:function (){},eat:function (){}}//男人function Man(){}// 把公共的属性和方法给原型,这样就可以共享Man.prototype = People//让原型里面的constructor 从新指向Man找父级Man.prototype.constructor=Manconst pink = new Man()console.log(pink) 

在这里插入图片描述
男人和女人都同时使用了同一个对象,根据引用类型的特点,他们指向同一个对象,修改一个就会都影响。
在这里插入图片描述
如果男人添加吸烟的方法,女人的对象原型也会添加。

Man.prototype.smoking= function(){}

在这里插入图片描述
完善继承写法,即消除原型对象指向同一个固定对象。

function Man(){}
Man.prototype = new Person()
// 让原型里面的constructor 从新指向找自己的父级
Man.prototype.constructor = Man
Man.prototype.smoking = function(){}
console.log(Man)

3.5 原型链

基于原型对象的继承使得不同构造函数的原型对象关联在一起,并且这个关联的关系是一种链状的结构,我们将原型对象的链状结构关系称为原型链

🌭查找规则

  1. 当访问一个对象的属性包括方法时,首先查找这个对象自身有没有该属性。
  2. 如果没有就查找它的原型,即_proto_ 指向的 prototype 原型对象
  3. 如果还没有就查找原型对象的原型,即Object对象
  4. 一次类推一直找到Object 为止
  5. _ proto_ 对象原型的意义就只在于为对象成员查找机制提供一个方向,或者说一条路线。

总结

这章理解面向对象思路,并且掌握函数原型对象,
会用面向对象封装继承特点,实现封装方法的使用。

相关文章:

JavaScript 进阶--charater3

文章目录前言一、编程思想1.1 面向过程介绍1.2 面向对象编程 (oop)对比二、构造函数三、原型3.1原型3.2 constructor 属性3.3 对象原型3.4 原型继承3.5 原型链总结前言 🆑学习目标 理解面向对象思想,掌握函数原型对象运用面向对象封装继承特点&#xf…...

Solon2 之基础:三、启动参数说明

启动参数,在应用启动后会被静态化(为了内部更高效的利用)。比如,想通过体外扩展加载配置,是不能改掉它们的。 1、启动参数 启动参数对应的应用配置描述–envsolon.env环境(可用于内部配置切换&#xff09…...

引入防关联浏览器以防止数据盗窃

目前,互联网已成为我们生活中不可缺少的且不断发展的一部分。因此,互联网变得更加复杂和多样化,每天都有新的技术、服务和应用推出。在这个不断变化的环境中,虚拟浏览器最近作为一种革命性的新方式出现在互联网上。 简而言之&…...

Spring的一些知识点

什么是Spring? Spring是一种轻量级的开发框架,旨在提高开发人员的开发效率以及系统的可维护性。 Spring的核心模块 Spring Core是基础模块,可以说Spring的其他功能都要依赖于该类库,主要提供IOC的依赖注入功能; Spri…...

使用WordPress快速搭建外贸网站教程

一、下载安装 1、首先前往官方下载wordPress框架,下载地址:Download | WordPress.org 2、把下载好的安装包上传到我们的服务器,解压 3、我使用的搭建环境是宝塔Linux CentOS 7.9(Apache2.4mysql5.6php7.4)&#xf…...

在 vue 或 react 项目中使用 mockjs 搭建 mock server

有时候,在公司里一些项目开发前,后端接口没那么快给到前端时,前端可以先跟后端约定好各个接口的请求路径、请求参数以及返回数据格式,先整理出一份接口文档,这样前端可以通过mockjs参考接口文档,自己先模拟…...

【十一届蓝桥杯】

ans 0for i in range(1,2021):ans (str(i).count(2))print(ans)第二个def check(s):return s 2020matrix []s input()while 1 not in s:matrix.append(list(s))s input()n,m len(matrix),len(matrix[0])ans 0for i in range(n):for j in range(m):if i 3 < n and c…...

vm 网络配置

点击NAT设置&#xff0c;配置本台虚拟机ip&#xff08;注意网关要在同一个网段&#xff09;&#xff0c;配置对应端口 然后添加映射端口&#xff1a; 然后选择网络适配器 选择vm8网卡 配置网卡静态ip #查看网卡 ip addr #修改网卡配置 cd /etc/sysconfig/network-scripts…...

2023年CDGA考试-第11章-数据仓库和商务智能(含答案)

2023年CDGA考试-第11章-数据仓库和商务智能(含答案) 单选题 1.商务智能是在构建好数据仓库以后,支撑业务决策 风险管理等更高层面的分析,以下描述不符合的是: A.提供数据查询、分析和报表等珈能 B.通过收集。整合 分析和探索数据来支持决策 C.对数据进行可视化 D.从数据中…...

从0-1搭建流媒体系统之live555 安装、运行、转发、拉流

流媒体开发系列文章 文章目录 流媒体开发系列文章前言一、环境准备?二、安装编译过程三、vscode调试代码四、代码分析总结前言 目前、比较有名的流媒体服务器有ZLMediaKit、srs、live555、eadydarwin等。因为srs是单线程服务、对于多核服务器的支持需要通过部署多个服务来充分…...

搭建个人博客保姆级教程(二)

文章目录一. Springboot项目打包成jar包二. mySql部署三. UI 项目部署一. Springboot项目打包成jar包 使用IDEA进行打包&#xff0c;当然也有其他部署方式&#xff0c;如使用maven进行打包&#xff0c;可自行查询资料。 1.打开项目&#xff0c;右击项目选中Open Module Settin…...

数字图像处理与Python实现-Pillow图像处理

Pillow图像处理 文章目录 Pillow图像处理1、Pillow介绍2、 Pillow 中的Image模块和Image类2.1 读取图像2.2 图像大小调整2.3 图像保存2.4 图像旋转2.5 图像储存模式与转换3、图像滤波处理3.1 使用卷积核进行滤波3.2 图像模糊、锐化和平滑3.3 边缘检测、边缘增强和浮雕效果3.4 图…...

HMM隐马尔可夫模型 | 关键原理+面试知识点

😄 HMM之前跟人生导师:李航学习过,这里结合自己的理解,精简一波HMM,总结一下面试中高频出现的要点。 文章目录 1、何为HMM?2、HMM三要素:3、HMM两大强假设4、HMM三个基本问题 :5、HMM中涉及的算法6、HMM缺点7、面试高频题7.1、HMM中为何引入维特比算法作为预测算法?…...

【Leedcode】数据结构中链表必备的面试题(第三期)

【Leedcode】数据结构中链表必备的面试题&#xff08;第三期&#xff09; 文章目录【Leedcode】数据结构中链表必备的面试题&#xff08;第三期&#xff09;一、第一题1.题目2.思路3.源代码二、第二题1.题目2.思路(1)第一种情况&#xff1a;偶数个链表(2)第二种情况&#xff1a…...

D1.Chopping Carrots (Easy Version)【数学,二分,暴力,思维】

链接 理论基础 已知正整数a,v,求证m⌊av⌋是满足⌊am⌋⩾v的最大的m&#xff0c;其中x是正整数已知正整数a,v,求证m\lfloor \frac {a}{v} \rfloor是满足\lfloor \frac {a}{m} \rfloor \geqslant v的最大的m&#xff0c;其中x是正整数已知正整数a,v,求证m⌊va​⌋是满足⌊ma​⌋…...

【Maven】(二)使用 Maven 创建并运行项目、聊聊 POM 中的坐标与版本号的规则

文章目录1.前言2.hello-world2.1.Archetype 创建2.2.使用 IDE 创建2.3.Maven的目录结构3.pom的基本组成3.1.Maven坐标的概念与规则3.2.版本号规则2.3.打包成可运行的JAR4.结语1.前言 本系列文章记录了从0开始到实战系统了解 Maven 的过程&#xff0c;Maven 系列历史文章&#…...

(考研湖科大教书匠计算机网络)第六章应用层-第六节:电子邮件

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;电子邮件&#xff08;1&#xff09;概述&#xff08;2&#xff09;举例二&#xff1a;简单邮件传送协议SMTP&#xff08;1&#xff09;SMTP基本工作…...

一、初识TypeScript、什么是类型系统

初识TypeScript、什么是类型系统 快速上手TypeScript 安装方式&#xff1a; > npm install -g typescriptTypeScript是JavaScript类型的超集&#xff0c;包含JS的所有语法&#xff0c;它可以编译成纯JavaScript。 意味着&#xff0c;纯js代码可以在.ts后缀名文件中编译 …...

一文了解什么是字节对齐(超详细)

什么是字节对齐 1.空类 class A {}对空类做sizeof&#xff08;&#xff09;计算时应当等于1 2.带虚函数的类 如果有一个类&#xff0c;包含两个32位整型的数据成员&#xff0c;一个普通成员函数&#xff0c;还有一个virtual虚函数&#xff0c;在32位机器上&#xff0c;这个…...

Java无法通过形参设置为null改变实参

文章目录问题描述问题例子问题分析问题描述 在实际业务开发过程中&#xff0c;我们会把实参传递给形参&#xff0c;在方法体内对引用对象进行构建或者修改&#xff0c;从而改变实参&#xff0c;因为对形参对象属性修改时&#xff0c;实参对象也会随着改变&#xff0c;详情请看&…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...