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

news2024/10/25 6:14:39

在这里插入图片描述

文章目录

        • 两大编程思想
        • 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
          在这里插入图片描述

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

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

相关文章

【K8S系列】Kubernetes pod节点Unknown 问题及解决方案详解【已解决】

在 Kubernetes 中,Pod 的状态为 Unknown 表示无法获取 Pod 的当前状态。这通常意味着 Kubernetes API 服务器无法与 Pod 所在的节点通信,或者 Kubelet 进程遇到问题。以下将详细介绍 Unknown 状态的原因、解决方案以及如何配置健康检查以提高系统的稳定性…

函数的实参和形参

什么是实参&#xff1f;什么是形参&#xff1f; 其实让我用语言来形容并不好描述&#xff0c;我们看例子&#xff1a; int add(int x , int y)//括号内就是形参 { int zxy; return z; } #include <stdio.h> int main() { int a8; int b9; int vadd(a,b);//括号内放置的参…

django-vue-admin测试环境搭建

django-vue-admin测试环境搭建 引言开发工具入门demo示例踩过的坑数据库字符集创建数据表前端路由 自定义app效果展示 引言 django-vue-admin框架&#xff0c;大幅度降低应用层代码难度,让每一个刚开始学习 django和vue的新手都能快速上手。这将会是你上手学习 djangovue的最佳…

PyQt 入门教程(3)基础知识 | 3.1、使用QtDesigner创建.ui文件

文章目录 一、使用QtDesigner创建.ui文件1、创建.ui文件2、生成.py文件3、使用新生成的.py文件4、编辑新生成的.py文件 一、使用QtDesigner创建.ui文件 1、创建.ui文件 打开PyCharm&#xff0c;使用自定义外部工具QtDesigner创建mydialog.ui文件&#xff0c;如下&#xff1a; …

pandas库——基础

1.概述 Pandas 是一个开源的第三方 Python 库&#xff0c;从 Numpy 和 Matplotlib 的基础上构建而来 Pandas 名字衍生自术语 "panel data"&#xff08;面板数据&#xff09;和 "Python data analysis"&#xff08;Python 数据分析&#xff09; Pandas 已…

Python酷库之旅-第三方库Pandas(166)

目录 一、用法精讲 761、pandas.Interval.closed_right属性 761-1、语法 761-2、参数 761-3、功能 761-4、返回值 761-5、说明 761-6、用法 761-6-1、数据准备 761-6-2、代码示例 761-6-3、结果输出 762、pandas.Interval.is_empty属性 762-1、语法 762-2、参数 …

【Mac 上将 MOV 格式转换为 MP4 格式的简易指南】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【C++】哈希实现unordered_map/set

关于哈希模拟实现unordered_map/set&#xff0c;与红黑树模拟实现map/set的大体思路相似。 【C】红黑树模拟实现map和set-CSDN博客 HashTable的迭代器 operator template<class K,class T,class KeyOfT> struct __HashTableIterator {typedef __HashTableIterator<…

电梯导航 - 点击标题跳转对应区域

需求 点击标题&#xff0c;使用a标签的锚点自动跳到对应区域滚动区域&#xff0c;右边自动切换对应的标题 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"wid…

大话红黑树之(3)进阶解析

红黑树高阶知识讲解 红黑树作为一种自平衡的二叉查找树&#xff08;BST&#xff09;&#xff0c;在大多数语言和库中有着广泛应用。它能够在常规操作&#xff08;查找、插入、删除等&#xff09;中保持 O(log n) 的时间复杂度。这篇文章从红黑树的高级特性、性能优化、旋转机制…

U9的插件开发之BE插件(1)

U9插件可分为&#xff1a;BE插件、BP插件、UI插件&#xff1b; BE(Business Entity) 简单就是指实体&#xff0c;U9的元数据。 我的案例是设置BE默认值&#xff0c;即在单据新增时&#xff0c;设置单据某一个字段的默认值&#xff0c;具体如下&#xff1a; 1.插件开发工具&a…

使用virtualenv导入ssl模块找不到指定的模块

最近在学习tensorflow&#xff0c;由于教程里面使用的是virtualenv&#xff0c;所以就按照教程开始安装了虚拟环境。但是在使用的时候&#xff0c;卡在了import ssl这一步&#xff0c;提示如下错误 >>> import ssl Traceback (most recent call last):File "<…

word删除空白页 | 亲测有效

想要删掉word里面的末尾空白页&#xff0c;但是按了delete之后也没有用 找了很久找到了以下亲测有效的方法 1. 通过鼠标右键在要删除的空白页面处显示段落标记 2. 在字号输入01&#xff0c;按ENTER&#xff08;回车键&#xff09; 3.成功删除了&#xff01;&#xff01; PS…

python excel如何转成json,并且如何解决excel转成json时中文汉字乱码的问题

1.解决excel转成json时中文汉字乱码的问题 真的好久没有打开这个博客也好久没有想起来记录一下问题了&#xff0c;今天将表格测试集转成json格式的时候遇到了汉字都变成了乱码的问题&#xff0c;虽然这不是个大问题&#xff0c;但是编码问题挺烦人的&#xff0c;乱码之后像下图…

018集——c# 实现CAD添加侧栏菜单(WPF控件)(CAD—C#二次开发入门)

本例实现的效果如下&#xff1a; 第一步&#xff1a;添加引用 using UserControl System.Windows.Controls.UserControl; using System.Windows.Forms.Integration;//PaletteSet integration 第二步 <UserControl x:Class"AcTools.UserControl1"xmlns"htt…

Pytorch学习--如何下载及使用Pytorch中自带数据集,如何把数据集和transforms联合在一起使用

一、标准数据集使用 pytorch官网–标准数据集 这里以CIFAR10数据集为例&#xff1a;CIFAR10 下载数据集 代码&#xff1a; import torchvision train_datatorchvision.datasets.CIFAR10(root"datasets",trainTrue,downloadTrue) test_datatorchvision.datasets.…

运维加薪之Ansible(DevOps Salary Increase with Ansible。‌)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

微服务架构学习笔记

#1024程序员节|征文# 微服务架构作为现代软件开发中的热门技术架构&#xff0c;因其灵活性和可扩展性&#xff0c;逐渐成为许多企业系统设计的首选。以下是关于微服务的一些学习笔记&#xff0c;涵盖微服务的核心概念、优缺点、设计原则以及常用工具等方面。 1. 微服务是什么&…

【Docker】docker | 部署nginx

一、概述 记录下nginx的部署流程&#xff1b;将conf配置文件映射到宿主机 前提依赖&#xff1a;自行准备nginx的镜像包 二、步骤 1、运行、无映射 docker run --name nginx -p 80:80 -d nginx:1.18.0-alpine 80&#xff1a;80&#xff0c;前面是宿主机端口&#xff1b;如果冲…

Spring Boot植物健康系统:智慧农业的新趋势

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…