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

原型

什么是原型(prototype)
每个函数在出生时就自带一个属性:
函数名.prototype —— 它是一张空对象,浏览器里叫 Foo.prototype。
每个对象在出生时也自带一个“隐姓埋名”的属性:
对象.proto(规范名 [[Prototype]]),它指向自己构造函数的 prototype。

用处:让所有实例共享一份方法/数据,省内存 + 能动态升级。
一、没有原型时:方法满天飞,内存爆炸
JavaScript
复制
function User(name) {
this.name = name
this.sayHi = function () { // 每个实例都新建一份
console.log(Hi, ${this.name})
}
}

const u1 = new User('Tom')
const u2 = new User('Jerry')

console.log(u1.sayHi === u2.sayHi) // false ➜ 100 万个用户就 100 万份函数
内存示意图:
复制
u1 : { name: 'Tom', sayHi: <func obj#1> }
u2 : { name: 'Jerry',sayHi: <func obj#2> } // 两份完全一样的代码
二、把方法挂到原型上:只存一份,所有实例自动可用
function User(name) {
this.name = name // 实例私有属性
}
// 公有方法 → 原型仓库
User.prototype.sayHi = function () {
console.log(Hi, ${this.name})
}

const u1 = new User('Tom')
const u2 = new User('Jerry')

console.log(u1.sayHi === u2.sayHi) // true ➜ 同一份函数
u1.sayHi() // Hi, Tom
u2.sayHi() // Hi, Jerry
内存示意图:
u1 : { name: 'Tom', proto -> User.prototype }
u2 : { name: 'Jerry',proto -> User.prototype } // 指向同一份

User.prototype : { sayHi: <func obj#1> }
原型链
当读取 对象.属性 时:
1.先看对象自身有没有;
2.没有 → 沿 proto 去原型对象找;
3.再没有 → 原型的原型(protoproto)……
4.直到 null 为止,这条链式查找路径就叫原型链。
u1.proto → Foo.prototype → Foo.prototype.proto → Object.prototype → null
作用 = 复用方法、实现继承、属性共享、instanceof 判断。

http://www.gsyq.cn/news/12084.html

相关文章:

  • 如何设置将浏览器网页临时禁用网页mathjax渲染直接查看latex编译前的文本
  • 软件开发公司如何利用大数据可视化设计提升决策效率
  • 使用 Rust 和 Tesseract OCR 实现英文数字验证码识别
  • Python HTTPS 爬虫实战,requests aiohttp Selenium 抓取技巧、HTTPS 问题与抓包调试(python https爬虫、反爬、抓包、证书处理)
  • 深入解析:基于开源AI大模型AI智能名片S2B2C商城小程序的产地优势产品营销策略研究
  • GreatSQL 优化技巧:最值子查询与窗口函数相互转换
  • Windows Time 时间同步时出错
  • CCS开发环境和TMS320系列DSP实现IP-IQ谐波与无功电流检测
  • 深入解析:Python数据分析:求矩阵的秩。啥是矩阵秩?听故事学线代并用Python实现,娘来太容易学会了!
  • Navicat17无限试用重置14天
  • 基于Electron的Web打印解决方案:web-print-pdf技术分享
  • CF455D Serega and Fun
  • 实验任务
  • React 基础核心概念(8 个)——从入门到能写业务组件(上)| 葡萄城技术团队
  • 实用指南:轻松玩转Swagger API文档神器
  • 为什么人工智能选择Python?深入解析AI界的胶水语言
  • 1 day(20250925) - when
  • 【重要】什么是 PEP 8 规范
  • 实用指南:华为坤灵:点燃中小企业智能化的星火
  • Windows时间同步列表注册表授时时间服务器
  • Mac 安装PDF2zh
  • 2025Unity必备知识——GUI(完整详细) - 指南
  • 读人形机器人23政府的角色
  • Python 在人工智能与机器学习中的地位与实践
  • 十八岁前开始远征
  • 设置vscode的默认字符编码
  • Natural Language Processing
  • Python 在自动化与运维中的价值与实践
  • redis 哨兵模式主从数据同步失败
  • US$66.5 Yanhua ACDP FEM/BDC Bench Integrated Interface Board