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

什么是JavaScript原型链?

原型链(Prototype Chain)是JavaScript中面向对象编程的一个核心概念,它定义了对象之间的层次关系和属性查找机制。在JavaScript中,每个对象都有一个[[Prototype]]属性(内部属性),这个属性指向其原型对象。当访问对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript引擎就会沿着原型链向上查找,直到找到该属性或方法或者到达原型链的末端(即Object.prototype的原型是null)。

原型链的组成:

  1. 每个对象都有原型:当创建一个对象时,如果没有指定构造函数的prototype属性,那么该对象的原型默认是Object.prototype

  2. 构造函数的prototype属性:每个函数都有一个prototype属性,它是一个对象,这个对象的所有实例(通过这个函数创建的对象)都将继承它。

  3. Object.prototype:所有使用new Object()或直接创建的对象(如字面量创建的对象)都会继承Object.prototype

  4. 原型链的顶端Object.prototype的原型是null,标志着原型链的末端。

如何访问原型:

在JavaScript中,可以使用__proto__(非标准,但广泛支持)或Object.getPrototypeOf()(标准方法)来访问一个对象的原型。

原型链的查找过程:

当你尝试访问一个对象的属性或方法时,以下查找过程会发生:

  1. 首先检查对象自身是否包含该属性或方法。
  2. 如果对象自身没有该属性或方法,JavaScript引擎会沿着原型链向上查找该属性或方法。
  3. 如果找到了对应的属性或方法,就直接返回该值。
  4. 如果到达原型链的末端(Object.prototype)仍未找到,那么返回undefined

原型链与继承:

原型链也是JavaScript实现继承的一种方式。当你创建一个对象时,它会自动继承其原型对象的属性和方法。这种继承方式使得JavaScript中的类可以更轻量级,因为不需要每个子类都复制一份父类的代码,只需继承父类的原型即可。

示例:

function Person(name) {
  this.name = name;
}

Person.prototype.sayHello = function() {
  return "Hello, my name is " + this.name;
};

var person = new Person("Alice");

// 通过原型链访问
console.log(person.sayHello()); // 输出: Hello, my name is Alice
console.log(person.__proto__ === Person.prototype); // 输出: true
console.log(Person.prototype.__proto__ === Object.prototype); // 输出: true

在这个例子中,person对象继承自Person.prototype,而Person.prototype又继承自Object.prototype。这使得person可以访问sayHello方法。


http://www.kler.cn/a/405034.html

相关文章:

  • 【从零开始的LeetCode-算法】3233. 统计不是特殊数字的数字数量
  • WordPress添加类似说说、微博的时间轴微语页面
  • MACOS开发、使用常见问题汇总
  • 用java和redis实现考试成绩排行榜
  • 【gitlab】部署
  • 【操作系统】操作系统的特征
  • CosyVoice 上手即用教程
  • 操作系统进程和线程——针对实习面试
  • 华为仓颉语言的技术梗概,底层原理是什么?什么架构,以后会替换JAVA语言了,信创背景下,要不要开始进入仓颉赛道,详细为您剖析仓颉语言
  • 【初阶数据结构篇】双向链表的实现(赋源码)
  • IDEA:2023版远程服务器debug
  • Kafka 3.5 源码导读
  • 网络安全-网络安全基础
  • Redis自动配置-序列化
  • 力扣题解(新增道路查询后的最短距离I)
  • 如何在MindMaster思维导图中制作PPT课件?
  • Spark中的Stage概念
  • 【WPF】Prism学习(十)
  • 第二十七章 TCP 客户端 服务器通信 - 连接管理
  • 基于uniapp开发的微信H5图片上传压缩
  • 2024.6使用 UMLS 集成的基于 CNN 的文本索引增强医学图像检索
  • 为正在运行的 Docker 容器重启策略,以提高服务的可用性
  • Django:从入门到精通
  • squeeze()
  • Applied Intelligence投稿
  • 大数据-230 离线数仓 - ODS层的构建 Hive处理 UDF 与 SerDe 处理 与 当前总结