JavaScript面向对象

一、编程思想

  • 面向过程介绍

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

面向过程,就是按照我们分析好了的步骤,按照步骤解决问题。

  • 面向对象编程(oop)

面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。

面向对象的特性:

封装性     继承性     多态性


二、构造函数

构造函数体现了面向对象的封装特性,实现创建的对象彼此独立、互不影响。

构造函数存在浪费内存的问题,我们希望所有的对象使用同一个函数,这样就比较节省内存,那么我们要怎样做呢?


三、原型

  • 原型

构造函数通过原型分配的函数是所有对象所共享的。JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象这个对象可以挂载函数,对象实例化不会多次创建原型上函数,节约内存我们可以把那些不变的方法,直接定义在 prototype 对象上,这样所有对象的实例就可以共享这些方法。构造函数和原型对象中的this 都指向实例化的对象。

原型 - this指向

构造函数和原型对象中的this都指向实例化对象。

  • constructor属性

该属性指向该原型对象的构造函数,简单理解,就是指向我的爸爸,我是有爸爸的孩子。

如果有多个对象的方法,我们可以给原型对象形式赋值。但是这样就会覆盖构造函数原型对象原来的内容,这样修改后的原型对象constructor就不再指向当前构造函数了。此时,我们可以在修改后的原型对象中,添加一个constructor指向原来的构造函数。

  • 对象原型

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

注意:

· __proto__是JS非标准属性

· [[prototype]]和__proto__意义相同

· 用来表明当前实例对象指向哪个原型对象prototype

· __proto__对象原型里面也有一个constructor属性,指向创建该实例对象的构造函数

  • 原型继承

继承是面向对象编程的另一个特征,通过继承进一步提升代码封装的程度,JS中大多是借助原型对象实现继承的特性。

继承之前:

原型继承之后:

如果有多个继承,使用构造函数:

  • 原型链

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

原型链-查找规则:

1、当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。

2、如果没有就查找它的原型(也就是_proto 指向的 prototype 原型对象)

3、如果还没有就查找原型对象的原型(0bject的原型对象)

4、依此类推一直找到 Object 为止(null)

5、__proto_对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线

6、可以使用 instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上

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

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

相关文章

使用Python实现管理员权限操作的WiFi的方法

在网络连接方面,无线局域网(WLAN)已成为我们日常生活中不可或缺的一部分;在某些情况下,我们可能需要管理员权限才能启用或禁用WLAN,但是通常会遇到权限不足的问题;为了解决这个问题,…

keil调试过程中遇到的问题及栈分析遇到的问题

文章目录 前言进行最坏运行时间分析及栈分析遇到的两个问题 一、问题1二、问题2总结 前言 进行最坏运行时间分析及栈分析遇到的两个问题 一、问题1 项目使用的时间片,在线调试过程中进行最坏运行时间通过打断点发现一个有个问题: 在一个时间片的开头和…

阻抗控制(Impedance Control)和导纳控制(Admittance Control)例子

阻抗控制(Impedance Control)和导纳控制(Admittance Control) 是两种用于机械臂或机器人交互控制的策略。阻抗控制定义的是机器人端部的力和位置之间的关系,而导纳控制则定义的是外力和运动之间的关系。导纳控制常用于处理机器人与环境交互中的力控制问题。 适用场景对比…

185.二叉树:二叉搜索树的最近公共祖先(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/class Solution { public:// 函数用于寻找二叉搜索树中节点 p 和 q 的最低…

flask基础4-flask数据库操作

目录 一.SQLALchemy 1.安装: 2.连接 二:创建OBM映射 SQLALchemy常用数据类型 三:数据的CRUD操作 1.构建session对象 2.添加对象 3.查找对象 4.修改对象 5.删除对象 四:ORM的关联关系 1.表的外键关联一对多 3.ORM中的一…

Honor of Kings 2024.06.13 (2)

【第一局】准确的说,其实对面优势更加明显,可惜黄忠和墨子喜欢杀人,而我又是不喜欢杀人的,打了好几次失误 【第二局】阵容本来很有优势,这个二呆射手跟第一局黄忠一样爱杀人,应该说三路的输出都爱杀人&…

编程器可以做什么游戏:探索游戏开发的无限可能

编程器可以做什么游戏:探索游戏开发的无限可能 编程器,作为游戏开发的核心工具,赋予了开发者创造独特游戏体验的能力。那么,编程器究竟可以做什么游戏呢?本文将从四个方面、五个方面、六个方面和七个方面,…

小主机折腾记26

双独立显卡调用问题 前两天将tesla p4从x99大板上拆了下来,将880G5twr上的rx480 4g安装到了x99大板上,预计是dg1输出,rx480做3d运算。安装完驱动后,还想着按照之前tesla p4的设置方法去设置rx480,结果果然&#xff0c…

Serverless 使用OOS将http文件转存到对象存储

目录 背景介绍 系统运维管理OOS 文件转存场景 前提条件 实践步骤 附录 示例模板 背景介绍 系统运维管理OOS 系统运维管理OOS(CloudOps Orchestration Service)提供了一个高度灵活和强大的解决方案,通过精巧地编排阿里云提供的OpenAPI…

AcWing 477:神经网络 ← 拓扑排序+链式前向星

【题目来源】https://www.acwing.com/problem/content/479/【题目描述】 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。 对神经网络的研究…

Golang的json解析--Gjson库的使用举例

目录 简介 安装 原生的json解析 Gjson使用举例 基本使用 键路径 使用示例 其他资源 简介 在 Golang 中,解析 JSON 数据是一项非常常见的任务。Go提供了标准的JSON包,可以轻松地将JSON数据序列化和反序列化。但是,在使用标准JSON包…

Navigation的基本使用及其原理

Navigation的基本使用 1. 添加依赖 首先,在项目的build.gradle中添加Navigation组件库的依赖。 dependencies { implementation androidx.navigation:navigation-fragment:X.X.X implementation androidx.navigation:navigation-ui:X.X.X // 请替换X.X.X为当前最…

Go语言的GoFly快速开发框架已经支持Postgresql和Mysql两种数据库

两个数据库的选择 我们框架为了方便大家开发能更加业务场景选择不同侧重性能要求的数据,我们把MySQL和PostgreSQL两个在开源界很有名气数据库都支持进去。这样一个企业可以在开发习惯不改变情况下可以有两个选择。 这样的话我们在选择数据库系统时,需要…

Rust : windows下protobuf和压缩传输方案

此前dbpystream库是用python开发 web api。今天在rust中试用一下protobuf。 本文关键词:编译器、protobuf、proto文件、序列化、zstd压缩,build。 一、 protobuf编译器下载 具体见相关文章。没有编译器,protobuf无法运行。 windows参见&am…

【皇帝的新衣】虚拟小组长的团队管理

团队有时候会需要设立虚拟小组长来分组帮忙管理,那么,虚拟小组的负责人应当怎么做好管理动作? 目前很多大厂追求团队管理上的扁平化,但真正有实职的领导们一般管理30人数,此时需要一个虚拟小组长来分组帮忙管理。 一、…

字节出品SDXL-Lightning:文生图开放模型新突破

生成模型的研究中,文本到图像的生成一直是一个充满挑战的任务。传统的扩散模型虽然在生成质量上取得了显著的成果,但其生成过程往往需要大量的迭代步骤,这不仅导致计算成本高昂,而且生成速度缓慢,难以满足实时或近实时…

时间类:SimpleDateFormatk

一.作用 1.格式化:把时间变成我们喜欢的格式。 2.解析:把字符串表示的时间变成Date对象。 二.默认格式 SimpleDateFormat sdf1 new SimpleDateFormat();Date d1 new Date(0L); // format表示格式化的意思String str1 sdf1.format(d1);System.out.printl…

【MATLAB源码-第225期】基于matlab的计算器GUI设计仿真,能够实现基础运算,三角函数以及幂运算。

操作环境: MATLAB 2022a 1、算法描述 界面布局 计算器界面的主要元素分为几大部分:显示屏、功能按钮、数字按钮和操作符按钮。 显示屏 显示屏(Edit Text):位于界面顶部中央,用于显示用户输入的表达式和…

没有特斯拉的开源专利,就没有中国电动车产业今天的成就?

原文链接:没有特斯拉的开源专利,就没有中国电动车产业今天的成就? 特斯拉的开源专利,对中国电动车产业的影响有多大? 2014年6月12日(June 12, 2014),特斯拉(TESLA&…

nodejs 某音douyin网页端搜索接口及x_bogus、a_bogus(包含完整源码)(2024-06-13)

前言 x_bogus或a_bogus算法大概是对数据、ua、时间戳、浏览器的几个指纹进行计算,拿到一个110位大数组,然后转字符,在头部再添加十二位随机字符,再进行魔改的base64加密。 问:抖音的x_bogus、a_bogus值有什么用&#x…