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

JS进阶03

编程思想

面向过程

分析解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用

面向对象

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

面向对象更灵活,代码可复用,容易维护和开发,适合大型项目

特性:封装性 继承性 多态性

构造函数


封装是面向对象思想中比较重要的一部分,js面向对象可以通过构造函数实现的封装

浪费内存

构造函数的方法很好用,但存在浪费内存的问题


如上创建了两个function 实际上是一样的

如何解决上面浪费内存的问题呢?

原型

什么是原型

目标:实现方法共享
1.构造函数通过原型分配的函数是所有对象共享的
2.js规定,每一个构造函数都有一个prototype属性,指向**另一个对象,**所以我们也称为原型对象
3.这个对象可以挂载函数,对象实例化不会多次创建原型函数,节约内存


属性可以写在构造函数身上,但方法可以写在原型上


这样指向的就是同一个函数

构造函数和原型对象里面函数的this指向的都是实例对象

constructor属性

在哪里?每个原型对象都有constructor属性(constructor构造函数)
这个属性指向该原型对象的构造函数

如果如下这样写

这么写相当于赋值操作
里面本来是{constructor:f}
这样写等于赋值给那个
此时prototype以为没有constructor就找不到构造函数了,那这样不就违背了原型的设计初衷?(解决内存浪费)
所以要加上

对象原型

有这样一个问题 以构造函数来new出来的实例对象是怎么访问到原型上的属性和方法呢?目前来看是这样

但是好像实例对象和原型缺了一条线
那就是因为实例对象里面会有一个属性__proto__(对象原型)指向原型对象。


浏览器显示是括号显示,你自己写代码写的是ldh.__proto__

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

原型继承

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

可以看到,woman和man的属性是一样的 ,那能不能提取出来 分别继承?

那怎么继承?
通过原型继承

这样实例化对象就能通过对象原型来访问到原型
但是要注意 上面写法是对原型的覆盖,要加上constructor属性


但是这样还会有一个问题

女人添加的方法男人也会有

为什么会这样?
因为他们继承的对象都是一样的

这样你改对象,他们指向的是同一个对象
所以这么写不合理
那怎么解决呢?

男女分别指向。
这样是可以的,就是有点麻烦。
他们结构一样,但是对象不一样,构造函数可以解决

每次new都是一个新对象

原型链(重要高频)

我们已经知道实例化的对象有个对象原型指向原型

对象原型指向的是实例化对象的构造函数的原型
其实原型上也有一个对象原型,那么这个指向什么?
指向Object的原型


Object的原型上也有一个对象原型
在往上指,就是null


规则

  • 只要是对象就有对象原型
  • 只要是原型对象就有constructor


访问一个对象属性:
1.先找对象自身的属性方法
2.原型的属性方法
3.原型的原型的属性方法
4.直到null

回头看array的map方法

为什么有这个方法?
其实就是在array的原型上有这个方法

http://www.jsqmd.com/news/843459/

相关文章:

  • 从数据到洞察:DataRoom如何用3个步骤解决你的大屏可视化难题
  • 工业现场排错实录:用Modscan32快速定位Modbus通信故障(从超时到校验错误)
  • 全局异常/错误捕获
  • Memos数据迁移踩坑实录:从SQLite数据库到Obsidian Thino插件的完整避坑指南
  • 如何在 Linux 系统后台运行 Grafana 服务并设置开机自启?
  • 工业润滑油选购指南:赤士盾的优势与特点 - mypinpai
  • LabVIEW虚拟仪表:数据流编程与测控应用的核心交互范式
  • FPGA异构架构实战:从智能感知到运动控制的竞赛项目全解析
  • 2026年实测:3分钟去AI痕迹,2w字从高AIGC率到盲审通过,收藏这份必备指南 - 降AI实验室
  • 振鑫奢侈品回收选购指南:靠谱品牌与价格分析 - mypinpai
  • 告别手动提交!用Bash脚本批量处理VASP+ShengBTE的700+热输运计算任务
  • 个人开发者如何利用Taotoken模型广场高效选型与切换
  • 别再只会看任务管理器了!用Perfmon监控Windows性能,这5个关键计数器才是真香
  • LabVIEW库资源全解析:从内置函数到专业工具包的实战指南
  • 魔数智擎再获专利,天阳科技金融AI布局继续推进
  • 两阶段目标检测器核心原理与流程详解
  • laravel框架控制器在接口输出数据中最外层添加字段重置response.data数据success
  • 【SAP PO】消息ID追踪与端到端接口监控实战指南
  • 2026年商标律所排行榜单:专业机构实力参考 - 品牌排行榜
  • 2026年口碑好的数控刀具供货商盘点 - mypinpai
  • 从选题到发表全流程提效,NotebookLM教育研究辅助全链路解析,附教育部重点课题实测报告
  • 英雄联盟智能助手Seraphine:提升游戏体验的终极工具指南
  • 将 Hermes Agent 工具连接到 Taotoken 自定义模型提供方
  • 国产巴伦替代 Mini-Circuits TCM1‑63AX+,H3‑TCM1‑63AX+ 现货可原位替代
  • 短视频获客教程:如何在抖音月揽31+询盘?
  • 不限用户不限量,核心功能全免费,中小企业零成本数智化起点
  • 2026年降AI教程:亲测8款降AI率神器(含免费避坑干货) - 降AI实验室
  • MSP430L092 0.9V超低功耗MCU:物联网设备微型化与长续航的终极方案
  • 基于树莓派与热敏打印机的离线一次性密码本系统实现
  • LabVIEW编程实战:从数据流到状态机,构建工业级应用的四大支柱