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

JavaScript 原型,原型链的特点

JavaScript 的原型(Prototype)和原型链(Prototype chain)是 JavaScript 面向对象编程中的重要概念。

原型(Prototype)

在 JavaScript 中,每个对象都有一个原型对象,而这个原型对象定义了这个对象的属性和方法。这个原型对象本身也可能会有自己的原型,这样就形成了一个链式结构,也就是所谓的“原型链”。

当在对象上查找一个属性时,如果这个对象自身没有这个属性,JavaScript 就会在该对象的原型(也就是它的 [[Prototype]] 属性)上查找,如果还没有,就会继续查找原型的原型,以此类推,直到找到对应的属性或者达到原型链的顶端(即 null)。

代码示例

以下面的代码为例:

function Person(name) {
this.name = name;
}Person.prototype.sayHello = function() {
return `Hello, I'm ${this.name}`;
};let person1 = new Person('Alice');
let person2 = new Person('Bob');console.log(person1.sayHello()); // 输出 "Hello, I'm Alice"
console.log(person2.sayHello()); // 输出 "Hello, I'm Bob"

在这个例子中,sayHello 方法被定义在 Person 函数的 prototype 上,这样所有通过 new Person() 创建的对象都可以访问这个方法。当我们试图访问 person1 或 person2 的 sayHello 方法时,JavaScript 首先会在这些对象自身上查找这个方法,如果没有找到,就会沿着原型链向上查找,直到找到 sayHello 方法或者到达原型链的顶端。

特点说明

JavaScript 的原型系统有以下特点:

  1. 动态性:可以在运行时动态地添加或删除对象的属性和方法。
  2. 共享性:所有的实例都可以共享它们的原型上的属性和方法,修改一个实例的属性会影响到其所有的实例。
  3. 链式查找:当访问一个对象的属性或方法时,如果这个对象自身没有这个属性或方法,JavaScript 会沿着原型链向上查找。

相关文章:

  • [PyTorch][chapter 64][强化学习-DQN]
  • 微软 Edge 浏览器目前无法支持 avif 格式
  • Labelme加载AI(Segment-Anything)模型进行图像标注
  • 解决DaemonSet没法调度到master节点的问题
  • 短视频获客系统成功分享,与其开发流程与涉及到的技术
  • Ubuntu18.04安装A-Loam保姆级教程
  • 4-20mA高精度采集方案
  • 【nlp】3.5 Transformer论文复现:3.解码器部分(解码器层)和4.输出部分(线性层、softmax层)
  • Re54:读论文 How Context Affects Language Models‘ Factual Predictions
  • CSS:浏览器设置placeholder样式 / 微信小程序设置placeholder样式
  • Feign接口请求返回异常 no suitable HttpMessageConvert found for response type
  • 网络安全(黑客技术)—0基础小白自学
  • 系列六、Spring整合单元测试
  • Pycharm创建项目新环境,安装Pytorch
  • java springboot测试类虚拟MVC环境 匹配返回值与预期内容是否相同 (JSON数据格式) 版
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • Create React App 使用
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • ECMAScript6(0):ES6简明参考手册
  • egg(89)--egg之redis的发布和订阅
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Java多态
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Promise面试题2实现异步串行执行
  • SQL 难点解决:记录的引用
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 翻译:Hystrix - How To Use
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 今年的LC3大会没了?
  • 判断客户端类型,Android,iOS,PC
  • 十年未变!安全,谁之责?(下)
  • 应用生命周期终极 DevOps 工具包
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #QT(TCP网络编程-服务端)
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • %@ page import=%的用法
  • (10)ATF MMU转换表
  • (52)只出现一次的数字III
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (二)丶RabbitMQ的六大核心
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (一) storm的集群安装与配置
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)可以带来幸福的一本书
  • (转载)深入super,看Python如何解决钻石继承难题
  • .NET CF命令行调试器MDbg入门(三) 进程控制