深入理解JavaScript:两大编程思想和ES6类以及对象概念解析

在这里插入图片描述

文章目录

        • 两大编程思想
        • ES6中的类和对象

两大编程思想

面向过程 (Procedural-Oriented Programming,POP)

  • 定义:面向过程的编程是一种基于过程调用的编程范式,它将程序看作是一系列函数或过程的集合。每个函数负责完成特定的任务
  • 特点
    • 顺序执行:程序按照先设定好的顺序执行一系列步骤
    • 数据和功能分离:数据结构和处理数据的函数通常是分开的
    • 重用性:通过函数的形式提高代码的复用性
    • 模块化:可以将大型程序划分为多个小的模块或函数来简化开发
  • 适用场景:适合于小型到中型项目,尤其是那些逻辑相对简单、不需要复杂的数据结构管理的应用

面向对象 (Object-Oriented Programming,OOP)

  • 定义:面向对象编程是一种编程范式,它使用“对象”——数据和操作这些数据的方法的封装体——来设计应用程序和计算机程序。OOP的核心概念包括类、对象、继承、封装、多态等
  • 特点
    • 封装性:将数据(属性)和行为(方法)绑定在一起,形成一个独立的单元(即对象),并且可以限制外部直接访问对象内部的状态
    • 继承性:允许创建一个新类,该类继承另一个已存在的类的属性和方法,从而促进代码复用
    • 多态性:同一个行为可以有不同的实现方式(多态性),这使得不同类的对象可以通过相同的接口以不同的方式实现相同的行为
    • 抽象:通过抽象类和接口,可以隐藏复杂的实现细节,只暴露必要的信息给用户
  • 适用场景:适用于大型项目,特别是需要处理复杂数据相关和业务逻辑的情况。面向对象编程有助于更好的组织代码,提高可维护性和扩展性
ES6中的类和对象

类 (class)

  • 创建类 class 类名{属性和方法} [构造函数语法糖]
    class Person {
    	constructor(name, age) {
     		this.name = name
     		this.age = age
    	}
    	sayHello() {
     		console.log(`Hello, my name is ${this.name}`)
    	}
    }
    // 类名首字母大写    类就是构造函数的语法糖
    
  • constructor构造函数
    class Star {
    	constructor (uname,age){
    		this.uname = uname
    		this.age = age
    	}
    }
    // 属性:放到constructor构造函数里面
    
    • constructor() 方法是类的构造函数 (默认方法),用于传递参数,返回实例对象,通过new命令生成对象实例时,自动调用该方法
    • 注意
      • 类里面的方法不带function,直接写即可

      • 类里面要有属性方法,属性方法要是想放到类里面,我们用constructor构造器

      • 构造函数作用:接收参数,返回实例对象,new的时候主动执行,主要放一些公共的属性

      • 每个类里面一定有构造函数,如果没有显示定义, 类内部会自动给我们创建一个constructor()

      • this代表当前实力化对象,谁new就代表谁

  • 类的继承
    • extends 子类继承父类
      // 定义父类
      class Animal {
      	constructor(name) {
      		this.name = name
      	}
      	speak() {
      		console.log(`${this.name} makes a noise.`)
      	}
      }
      // 定义子类
      class Dog extends Animal {
      	constructor(name, breed) {
        	super(name) // 调用父类的构造函数
          this.breed = breed
        }
      	speak() {
      		console.log(`${this.name} barks.`)
      	}
      	getBreed() {
      		return this.breed
      	}
      }
      
    • super关键字 调用父类的方法(普通方法,构造方法)
      • super关键字用于访问和调用对象父类上的函数。可以调用父类的构造函数,也可以调用父类的普通函数
      • 当子类没有constructor的时候可以随意用父类的,但是如果子类也含有的话,constructor会返回实例,this的指向不同,不可以再直接使用父类的东西
      // 调用父类构造函数
      class F { constructor(name, age){} }
      class S extends F { constructor (name, age) { super(name,age) } }
      // 注意: 子类在构造函数中使用super, 必须放到this 前面(必须先调用父类的构造方法,在使用子类构造方法)
      // 调用父类普通函数
      class F { constructor(name, age){} say () {} }
      class S extends F { constructor (name, age) { super(name,age) } say () { super.say() } }
      // 注意:如果子类也有相同的方法,优先指向子类,就近原则
      
      • 属性和方法
        • 属性: 如果子类既想有自己的属性,又想继承父类的属性,那么我们用super [super(参数,参数)]
        • 方法:如果子类和父类有相同的方法,假如子类依旧想用父类的属性,那么我们用super调用 [super.方法()]
        • 如果子类不写东西,那么直接继承父类就可以用
        • 如果子类有自己的构造函数和父类同名的方法,此时不可以直接用父类的东西,需要用super调用父类的方法和构造函数
  • 注意
    • 在ES6中 类 没有变量提升,所以必须先定义类,才能通过实例化对象
    • 类里面的共有属性和方法一定要加this使用 [this,对象调用属性和方法]
    • 类里面的this指向问题
      • constructor里面的this指向实例对象
      • 普通方法里面的this指向这个方法的调用者
        对象
  • 创建对象的三种方式
    • 对象字面量 var obj = {}
    • 构造函数 var obj = new Object()
    • 自定义构造函数 var obj = new 类名()
      function Person(uname,age) {
      	this.uname = uname
      	this.age = age
      	this.chi  = function() {
      		console.log('吃')
        }
      }
      // 构造函数要和new结合使用
      var obj = new Person('黄嘉文',22)
      console.log(obj)
      obj.chi()
      
  • 构造函数
    • 介绍:是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与new一起使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面
    • 使用注意事项
      • 构造函数用于创建某一类对象,其首字母要大写
      • 构造函数要和new一起使用才有意义
    • new在执行时会做的事
      • 在内存中创建一个新的空对象
      • 让this指向这个新的对象
      • 执行构造函数里面的代码,给这个新对象添加属性和方法
      • 返回这个新对象 (所以构造函数里面不需要return)
    • 原型 prototype
      • 概念:是构造函数的一个属性,也是一个对象,称为原型对象
      • 作用:共享方法,从而达到节省内存
      function Star(uname, age) {
      	this.name = uname
      	this.age = age
      }
      Star.prototype.say = function () {
       	console.log('方法')
      }
      var obj = new Star('小甜甜', 23)
      console.log(obj)
      obj.say()
      // Star也是对象
      // 每一个构造函数都有prototype属性
      // prototype是构造函数的一个属性
      // 我们以后把方法都放到原型对象上面
      console.log(Star.prototype)
      
      • 注意:每一个构造函数都有prototype属性
      • 总结:公共属性放到构造函数中,公共方法放到原型对象中
    • 对象原型 proto
      • 作用:指向原型对象
      function Star(uname, age) {
      	this.name = uname
      	this.age = age
      }
      Star.prototype.say = function () {
      	console.log('小甜甜')
      }
      // 构造函数,实例化对象
      var obj = new Star('甜甜', 23)
      console.log(obj)
      // console.log(obj.__proto__ 等价于 Star.proto)
      console.log(Star.prototype)
      obj.say()
      
      • 注意
        • 每个对象都有一个__proto__
        • __proto__是一个非标准属性,不可以拿来赋值或者设置【只读属性】
        • 构造函数和原型对象都会有一个属性proto指向构造函数的prototype 原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有proto 原型的存在
        • __proto__对象原型和原型对象prototype 是等价的
        • __proto__对象原型的意义就在于为对象的查找机制提供一个方向,或者说一条路线,但是它是一个非标准属性,因此实际开发中,不可以使用这个属性,它只是内部指向原型对象prototype
          在这里插入图片描述

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

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

相关文章

推荐一个好用的VSCode插件

还在花馒头使用 Copilot?别再做大冤种啦! 现在有个更好用的AI编程助手--豆包 MarsCode!它不仅完全免费,而且功能强大,让你在编程时得心应手!再也不用担心高昂的订阅费用,省下来的馒头&#xff…

衡石分析平台系统分析人员手册-图表查询应用

查询应用​ 在业务分析过程中,查询明细数据有时需要满足如下场景: 在自助化的操作界面中用户可以自主选择查询字段及相应的筛选条件进行查询。用户通过简单的鼠标点击能够快速获得所需数据,并提供聚合计算等高级功能。 上述场景可以通过查…

数据结构与算法-21算法专项(中文分词)(END)

中文分词 搜索引擎是如何理解我们的搜索语句的? mysql中使用 【like “%中国%”】,这样的使用方案 缺点1:mysql索引会失效缺点2:不能模糊,比如我搜湖南省 就搜不到湖南相关的 1 trie树 Trie树,又称前缀树…

C++ 中的可调用对象

目录 一.可调用对象简介 1.什么是可调用对象? 2.可调用对象有什么用? 二.函数指针和仿函数 1.函数指针 a.函数指针的使用语法 b.函数指针的应用场景 2.仿函数 a.仿函数的基本概念 b.仿函数的优点 三.lambda表达式和function 1.lambda表达式 …

完全了解一个asp.net core MVC项目模板

当我们使用Visual Studio 2022去新建一个基于asp.net core Web项目的时候,一般有三种选择,一种是空项目,一种是基于MVC的项目、再有一种就是基于包含Razor Pages实例的web应用。如下图: 今天,我们打算选择基于MVC模…

《MYSQL 实战45讲》 慢查询产生的原因

一.查询长时间不返回的原因 首先要执行下show processlist来查看各个线程的状态(是否在等待锁) 1.DML写锁导致其他线程对改表的读取被阻塞 当一个线程正在持有t表的DML写锁时,其他线程查询语句就会被阻塞,一直等到DML写锁释放才…

RWA“两链一桥”平台在香港金融科技周亮相

第九届香港金融科技周今日开幕,记者在主题为Trust Bridge的论坛上获悉,蚂蚁数科旗下蚂蚁链在此次金融科技周首次公开了其为RWA业务打造的“两链一桥”平台,旨在帮助更多内地新能源资产赴港RWA,实现技术赋能实体资产。 “两链一桥“…

MySQL8 安装配置及卸载教程

MySQL8 安装配置及卸载教程 0 卸载 MySQL 如果之前没安过 MySQL ,或者卸载干净了不用看这个。 如果安装中出现以下问题,有可能是为之前安装 MySQL 不成功,有残留的安装程序等文件程序或者是卸载 MySQL 不成功。 0.1 停止服务 首先进入服务…

LabVIEW航空发动机测试系统

随着航空工业的快速发展,发动机性能的测试与优化成为确保航空安全的关键任务。针对日益复杂的性能需求,开发了一套基于LabVIEW的航空发动机测试系统,能够进行精确的性能评估与实时数据分析。系统将软件与硬件深度结合,实现了自动化…

容联云容犀Copilot&Agent荣获「2024中国大模型应用之星」

近日,2024中国智能应用发展大会于北京举行,容联云凭借大模型应用——容犀Copilot&Agent在大模型应用领域的卓越表现和标杆案例,荣获“2024中国大模型应用之星奖”。 中国软件网CEO、海比研究院院长曹开彬在开场致辞中明确指出&…

建筑行业知识管理:构建高效文档管理系统,提升项目协作与管控能力

各行各业都在经历数字化转型,建筑行业也不例外,正经历着前所未有的变革。随着工程项目规模的扩大和复杂性的增加,传统的管理方式已难以满足高效协作和精准管控的需求。因此,构建一个高效的在线AI知识库管理系统,成为提…

【STM32】SD卡

(一)常用卡的认识 在学习这个内容之前,作为生活小白的我对于SD卡、TF卡、SIM卡毫无了解,晕头转向。 SD卡:Secure Digital Card的英文缩写,直译就是“安全数字卡”。一般用于大一些的电子设备比如:电脑、数码相机、AV…

【视频】Camera结构详解

1、爆炸图 先看几张爆炸图: lens:镜头 VCM:音圈马达 Voice coil motor Mount :固定座 IR Filter:滤光片 Sensor:感光传感器(图像传感器) Substrate:基板 FPC:柔性印制电路板 2、镜头 镜头是仅次于Sensor芯片影响画质的第二要素,其组成是透镜结构,由几片透镜组…

使用微信免费的内容安全识别接口,UGC场景开发检测违规内容功能

大家好,我是小悟。 内容安全识别主要针对的是有UGC即用户生成内容的功能场景,通过结合内容安全的审核能力,应对文本、图片、音频内容类型下的敏感内容识别、涉黄内容识别、暴恐内容识别、辱骂内容识别等违规问题,可以提高审核效率…

UE5 射线折射

这个判断是否有标签是需要带有此标签的Actor来反射

【PnP】详细公式推导,使用DLT直接线性变换法求解相机外参

文章目录 🚀PnP1️⃣ 求解不考虑尺度的解2️⃣ 恢复解的尺度 🚀PnP PnP(Perspective-n-Point)是求解3D到2D点相机外参的算法。PnP算法有DLT直接线性变换、P3P三对点估计位姿、EPnP(Efficient PnP)、BA(Bundle Adjustment)光速法平差。这里主要讲解DLT。…

二十四、Python基础语法(变量进阶)

一、引用 在定义变量的时候, 解释器会给变量和数据分别在内存中分配内存,变量中保存的是数据的地址, 称为引用,Python 中数据的传递,传递的都是引用,可以使用 id(变量) 函数,获取变量中引用地址。 # 将数字1在内存中的地址储存到变量a中 a …

Ubuntu18.04安装vscode1.94.2失败安装vscode1.84.2

系统环境:Ubuntu18.04.6 LTS 自己先去vscode官网下载好最新版本的vscode1.94.2(不下也行,反正最新版也用不了,哈哈) 网址:Visual Studio Code - Code Editing. RedefinedVisual Studio Code is a code ed…

《编程并不难:像学语文一样学习编程语言》

《编程并不难:像学语文一样学习编程语言》 一、编程为何被认为难(一)编程语言的难点(二)逻辑思维的挑战(三)抽象思维的要求(四)学习曲线的陡峭(五&#xff09…

大数据-194 数据挖掘 机器学习理论 有监督、无监督、半监督、强化学习

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…