JavaScript进阶 第三天

news2025/1/16 7:51:02
  • 编程思想
  • 构造函数
  • 原型

 一.编程思想

  • 面向过程:分析出解决问题所需要的步骤,然后利用函数把这些步骤一步一步实现,使用的时候再一个一个依次调用就可以了(按照步骤划分)
  • 面向对象:把事务分解成一个个对象,然后由对象之间分工和合作(按照功能划分)

        ① 面向对象:每个对象都是一个功能中心,具有明确分工

        ② 面向对象编程具有灵活性,代码可复用,容易维护和开发等优点,适合多人开发的大型项目 

        ③ 面向对象的特性:(封装性,继承性,多态性)

  • 面向过程

        ① 优点:性能比面向对象高,适合跟硬件联系紧密的东西,比如单片机就采用面向过程编程

        ② 缺点:没有面对对象易维护,易复用,易拓展

  • 面向对象

        ① 优点:易维护,易复用,易拓展,由于面向对象有封装,继承,多态性的特性,可以设计出低耦合的系统,使系统更加灵活,更容易维护

        ② 缺点:性能比面向过程低

      前端面向过程更多一点 

     二. 构造函数

  • 封装是面向对象思想中比较重要的一部分, JS面向对象可以通过构造函数实现封装
  • 构造函数实例创建的对象彼此独立,互不影响
  • 但是构造函数存在浪费内存的问题

     三.原型

     3.1 原型

  •  构造函数通过原型分配的函数是所有对象所共享的
  • JS规定,每一个构造函数都有一个prototype属性,指向另一个对象,也称为原型对象
  • 这个对象可以挂载函数,对象实例化不会多次创建原型上函数,节约内存
  • 可以把不变的方法,直接定义在prototype 对象上,这样所有对象的实例就可以共享这些方法
  • 构造函数和原型对象中的this都指向实例化的对象
        // 公共的属性写到构造函数中
        function Star(uname, age) {
            this.uname = uname
            this.age = age
        }

        // 公共的方法写到原型中
        Star.prototype.sing = function() {
            console.log('唱歌')
        }

        const ldh = new Star('刘德华', 55)
        const zxy = new Star('张学友', 56)

   3.2 constructor属性

    ① 每个原型对象里面都有个constructor属性

    ② 作用:该属性指向该原型对象的构造函数

    

 ③ 使用场景

如果有多个对象的方法,可以给原型对象采取对象形式赋值,但是这样就会覆盖构造函数原型对象原来的内容,修改后的原型对象constructor 就不再指向当前构造函数了

这个时候,可以在修改后的原型对象中,添加一个constructor 指向原来的构造函数

    Star.prototype = {
        // 指回构造函数
        constructor: Star,
        sing: function() {
            console.log('唱歌')
        },
        dance: function() {
            console.log('跳舞')
        }
    }
    console.log(Star.prototype)

3.3 对象原型

对象都会有一个属性__proto__指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有__proto__原型的存在

  •  __proto__是JS非标准属性
  • [[prototype]]和__proto__意义相同
  • 用来表明当前实例对象指向哪个原型对象prototype
  • __proto__对象原型里面也有一个constructor属性,指向创建该实例对象的构造函数

3.4 原型继承

        // 父类:构造函数 new出来的结构一样,但是对象不一样
        function Person () {
            this.eyes = 2
            this.head = 1
        }

        // 子类
        function Woman () {
        }

        // 子类的原型 = new 父类
        // 子类的constructor指回构造函数
        Woman.prototype = new Person()
        Woman.prototype.constructor = Woman

        Woman.prototype.baby = function () {
            console.log('宝贝')
        }
        const red = new Woman()
        console.log(red)

        function Man () {
        }

        const pink = new Man()

        Man.prototype = new Person()
        Man.prototype.constructor = Man
        console.log(pink)

3.5 原型链

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

 

 ② 原型链解释

  • 原型链就是一个查找规则,当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性
  • 如果没有就找它的原型(也就是__proto__指向的prototype 原型对象)
  • 如果还没有就查找原型对象的原型(Object的原型对象)
  • 依次类推,一直找到Object为止(null)
  • __proto__对象原型的意义就在于为对象成员查找提供一个方向或者一条路线
  • 可以使用instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上
 function Person() {

}

const ldh = new Person()
// 判断前者属不属于后者
console.log(ldh instanceof Person)
console.log([1,2,3] instanceof Array)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络通信原理IP头部格式(第四十二课)

字段作用解析:1)版本: 指的IP地址的版本 (IPv4 或 IPV6)2)首部长度: 次数据包的首部长度一共是多少,没有加可选项3)优先级与服务类型:表示****数据包是否需要优选传递4)总长度: 表示的是整个数据包的大小,也就****是首部+数据5)标识符、标志、段偏移量:的作用将拆开的…

Java基础篇--重写(Override)与重载(Overload)

目录 重写(Override) 重写(override)的规则: 重载(Overload) 重载(overload)的规则: 示例代码 重写与重载之间的区别 总结 在Java中,重写…

Unity C# 之 Azure 微软SSML语音合成TTS流式获取音频数据以及表情嘴型 Animation 的简单整理

Unity C# 之 Azure 微软SSML语音合成TTS流式获取音频数据以及表情嘴型 Animation 的简单整理 目录 Unity C# 之 Azure 微软SSML语音合成TTS流式获取音频数据以及表情嘴型 Animation 的简单整理 一、简单介绍 二、实现原理 三、注意事项 四、实现步骤 五、关键代码 一、简…

港科夜闻|香港科大(广州)与南沙科金控股签订战略合作协议,为南沙创新生态与高质量发展提供持续强劲动力...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大(广州)与南沙科金控股签订战略合作协议,为南沙创新生态与高质量发展提供持续强劲动力。双方将以此为契机,立足自身资源优势,完善合作机制,深化合作领域&#xff0c…

MOM or MES:如何选择适合工厂的制造管理系统?

在现代制造业中,有效的制造管理系统对于工厂的生产效率和竞争力至关重要。这衍生出来了两个常见的解决方案:MOM(Manufacturing Operations Management)制造管理系统和MES(Manufacturing Execution System)制…

无涯教程-Perl - socketpair函数

描述 此函数使用PROTOCOL在指定的DOMAIN(指定的TYPE)中创建一对未命名的连接Socket。如果未实现系统socketpair()函数,则将导致致命错误。 语法 以下是此函数的简单语法- socketpair SOCKET1, SOCKET2, DOMAIN, TYPE, PROTOCOL返回值 如果失败,此函数返回0,如果成功,则返回…

基于STM32CUBEMX驱动TMOS模块STHS34PF80(5)----配置嵌入式函数

基于STM32CUBEMX驱动TMOS模块STHS34PF80----4.中断获取信号 概述样品申请视频教程参考Demo参考Demo内嵌函数地址串口配置IIC配置IO口设置串口重定向参考程序初始化IIC写函数IIC读函数获取ID设备的自动引导过程和关机模式配置省电模式温度数据的灵敏度值设置低通滤波器温度测量滤…

Java算法_ 反转二叉树(LeetCode_Hot100)

题目描述:给你一棵二叉树的根节点 ,翻转这棵二叉树,并返回其根节点。root。 获得更多?算法思路:代码文档,算法解析的私得。 运行效果 完整代码 /*** 2 * Author: LJJ* 3 * Date: 2023/8/16 13:18* 4*/public class In…

无涯教程-Perl - split函数

描述 此函数根据PATTERN指定的分隔符将字符串表达式拆分为多个字段。如果未指定任何模式,则默认为空白。可选限制限制了返回的元素数。 负限制与无限制具有相同的作用。此函数通常与join()结合使用以创建小型文本数据库。 语法 以下是此函数的简单语法- split /PATTERN/, …

每天一道leetcode:1218. 最长定差子序列(动态规划中等)

今日份题目: 给你一个整数数组 arr 和一个整数 difference,请你找出并返回 arr 中最长等差子序列的长度,该子序列中相邻元素之间的差等于 difference 。 子序列 是指在不改变其余元素顺序的情况下,通过删除一些元素或不删除任何…

mavros源码安装与配置

0 背景 Ubuntu20.04 双系统 ROS Noetic Mavros本质上是ROS的一个功能包,因为笔者需要对其进行二次开发,所以选择源码安装。 参考:官方repository链接,官方安装文档 1 安装步骤 首先,确保安装了catkin相关工具 # f…

防御DDoS服务应如何选择?一文全面讲透

最近人人都在谈论 DDoS, DDoS攻击不仅会损害受害者的金钱、服务和信誉,伴随着互联网的快速发展,它的防御难度相当大。报告显示,65%以上的DDoS攻击每小时给受害企业造成的损失高达一万美金。那么如何为企业构建全面的应对策略&…

Java:PO、VO、BO、DO、DAO、DTO、POJO

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Java:PO、VO、BO、DO、DAO、DTO、POJO PO持久化对象(Persistent Object) PO是持久化对象,用于表示数据库中的实体或表…

Iridient Developer for mac RAW图像调整

Iridient Developer 支持多种不同的文件格式,包括常见的RAW格式,如CR2、NEF、RAF等,以及JPEG、TIFF等。它具有非常精确的图像处理引擎,能够提供高质量的图像细节和色彩还原。 该软件提供了丰富的调整选项,包括曝光、白…

GRPC 链接 NODE 和 GOLANG

GRPC 链接 NODE 和 GOLANG GRPC 了解 什么是GRPC gRPC 采用了 Protocol Buffers 作为数据序列化和反序列化的协议,可以更快速地传输数据,并支持多种编程语言的跨平台使用gRPC 提供“统一水平层”来对此类问题进行抽象化。 开发人员在本机平台中编写专…

idea git命令使用

这个标签标识单签分支:(标签图标) 标识关联分支:(五角星) 本地切换分支:如当前分支是dev ,git branch 显示的是dev ,然后通过 git checkout -b release 切换到release分支 git checkout re…

JUC并发集合

目录 传统类集框架的弊端 1.并发集合的类型 2.并发单值集合 3.并发多值集合 4.跳表集合 传统类集框架的弊端 传统的类集框架存在一个非常严重的弊端。那就是在多线程的情况下对集合修改会报错。 如下代码 package Example2123;import java.util.ArrayList; import jav…

easyx图形库基础4:贪吃蛇

贪吃蛇 一实现贪吃蛇:1.绘制网格:1.绘制蛇:3.控制蛇的默认移动向右:4.控制蛇的移动方向:5.生成食物6.判断蛇吃到食物并且长大。7.判断游戏结束:8.重置函数: 二整体代码: 一实现贪吃蛇…

今年七夕情人节,要送数码产品给对象?这几款送人不出错的数码产品

时间过的还挺快的又到了今年的七夕情人节了,你是否还在为送什么数码产品给对象而犯愁?做过功课挑选的数码好物肯定会让TA十分惊喜,作为一个数码发烧友,我盘点了几款适合送对象的数码好物,大家可以甄选看看。 第一款&a…

LeetCode--HOT100题(32)

目录 题目描述:138. 复制带随机指针的链表(中等)题目接口解题思路代码 PS: 题目描述:138. 复制带随机指针的链表(中等) 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random &…