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

JS深入之从原型到原型链

1.什么是原型?(玩具模具)假设现在是在一个玩具工厂

构造函数===小狗玩具模型

原型=====玩具模型所共有的属性(类似于通用组件?或者说公共方法)

实例对象======所生产的小狗玩具

//1.这是一个小狗玩具模具(构造函数)
function dogToy(name){this.name = name
};//2.给小狗感觉添加都会叫的功能
dogToy.prototype.shout = function(){console.log(this.name + '在汪汪叫!!!')
}//3.生产小狗玩具(实例对象)
const dog = new dogToy('优优');
dog.shout();//打印出来就是优优在汪汪!

  • 所有通过 new dogToy() 生产的玩具,自动继承模具原型(shout 功能)
  • 原型像公共工具箱,省去给每个玩具单独装功能的麻烦

2.什么是原型链?(类似于家族族谱?或者可以说是找家族遗传病?)

        当小狗玩具需要新功能时:

        先看看自己有没有这个属性;

        如果自己没有,就去找原型,看看原型有没有

        原型要是没有,就去找原型的原型,一直像这样找,直到找到或者直到尽头如法在找

        

//1.当小狗玩具需要新功能时,原型没有
dog.sing();//原型没有,会报错//2.那就在原型链上添加新功能
Object.prototype.sing = function(){console.log(this.name + '会唱歌!!!')
}dog.sing()//输出优优会唱歌

  • 原型链像族谱:bear1 → BearToy.prototype → Object.prototype → null
  • 属性查找顺序:由近及远向上追溯

3.图解原型链关系

// 1. 实例与构造函数原型
console.log(bear1.__proto__ === BearToy.prototype); // true// 2. 构造函数原型与顶级原型
console.log(BearToy.prototype.__proto__ === Object.prototype); // true// 3. 顶级原型的终点
console.log(Object.prototype.__proto__); // null
  • 实例.__proto__ → 指向「构造函数的原型」
  • 构造函数.prototype → 指向「原型对象」
  • 链条终点是 null

4.总结

  1. 原型:构造函数的公共工具箱(构造函数.prototype
  2. 原型链:实例 → 构造函数原型 → 上级原型 → ... → null
  3. 核心价值:实现属性和方法的共享,节省内存
http://www.xdnf.cn/news/965215.html

相关文章:

  • 安装 docker-ce 时 错误:缺少container-selinux >= 2:2.74 错误:缺少 libcgroup
  • crosstool-ng构建sysroot
  • 【面向对象】1. 原型与原型链的概念
  • 如何保证RocketMQ消息不丢失
  • TDengine 快速体验(Docker 镜像方式)
  • docker 网络管理
  • 观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
  • MyBatis的#和$符号详解(Java面试)
  • 企业产品网络安全日志6月10日-WAF资费消耗排查
  • 【大模型01---Flash Attention】
  • 常见的http状态码
  • MySQL主从复制实现指南
  • AWS Lambda Python + AWS Secrets Manager + AWS Aurora Mysql
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月10日第104弹
  • 深度学习聊天机器人 需要考虑
  • Linux简单的操作
  • 基于算法竞赛的c++编程(29)类的概念和简单应用
  • v-bind 与 v-model 的区别与联系详解
  • python第48天打卡
  • 通过 VS Code 连接 GitLab 并上传项目
  • 第十四届蓝桥杯_省赛B组(C).冶炼金属
  • 【单片机期末】汇编试卷
  • 64页|PPT|基于华为IPD与质量管理体系融合的研发质量管理:L1-L6分层架构驱动高效运营、标准化质量管理体系
  • 【解密LSTM、GRU如何解决传统RNN梯度消失问题】
  • 详解CNN
  • node+express+jwt+sequelize+mysql+本地服务器部署前端+云服务器公网部署:入门教程
  • 线程与进程(java)
  • 解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
  • 数据库——MongoDB
  • 定时器任务——若依源码分析