新闻中心

J*aScript原型继承_深入理解原型链机制

2025-11-28
浏览次数:
返回列表
J*aScript采用原型继承而非类继承,通过prototype和[[Prototype]]链实现对象间的属性查找与继承。

javascript原型继承_深入理解原型链机制

J*aScript中的原型继承是语言中最独特也最容易被误解的部分之一。很多人在初学时会被“类”的概念误导,其实J*aScript采用的是基于原型的继承机制,而不是传统面向对象语言中的类继承。理解原型链,是掌握J*aScript对象系统的关键。

原型与构造函数的关系

在J*aScript中,每个函数都有一个prototype属性,这个属性指向一个对象,即“原型对象”。当你用new操作符调用一个函数作为构造函数时,新创建的实例的内部[[Prototype]](通常可通过__proto__访问)会指向该构造函数的prototype

例如:

function Person(name) {
  this.name = name;
}
Person.prototype.greet = function() {
  console.log("Hello, I'm " + this.name);
};

const john = new Person("John");
john.greet(); // 输出: Hello, I'm John

这里,john.__proto__ 指向 Person.prototype,所以它能访问greet方法。

原型链的查找机制

当你尝试访问一个对象的属性或方法时,J*aScript引擎会先在该对象自身查找。如果找不到,就会沿着[[Prototype]]链向上查找,直到找到匹配的属性或到达链的末端(即null)。

这条向上的链接结构就是“原型链”。

比如:

console.log(john.toString()); // 调用的是 Object.prototype.toString

因为john自身没有toString,JS会查找Person.prototype,还没找到就继续查Person.prototype.__proto__,也就是Object.prototype,最终在那里找到toString方法。

来画数字人直播 来画数字人|直播|

来画数字人自动化|直播|,无需请真人主播,即可实现24小时|直播|,无缝衔接各大|直播|平台。

来画数字人直播 57 查看详情 来画数字人直播

原型链大致如下:

john 
  → Person.prototype 
    → Object.prototype 
      → null

如何实现继承:借用原型链

要让一个构造函数继承另一个构造函数的属性和方法,常见的做法是将子类型的原型设置为父类型实例。

示例:

function Student(name, grade) {
  Person.call(this, name); // 继承实例属性
  this.grade = grade;
}

// 建立原型链
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;

Student.prototype.study = function() {
  console.log(this.name + " is studying.");
};

const lily = new Student("Lily", 12);
lily.greet(); // Hello, I'm Lily
lily.study(); // Lily is studying.

这里关键的一行是:Student.prototype = Object.create(Person.prototype),它创建了一个以Person.prototype为原型的新对象,从而形成继承关系。

现代写法:使用 class 和 extends

ES6引入了class语法糖,让原型继承看起来更像传统类继承,但底层依然是原型链机制。

class Animal {
  constructor(name) {
    this.name = name;
  }
  speak() {
    console.log(this.name + " makes a sound.");
  }
}

class Dog extends Animal {
  constructor(name, breed) {
    super(name);
    this.breed = breed;
  }
  bark() {
    console.log(this.name + " barks!");
  }
}

const dog = new Dog("Max", "Golden Retriever");
dog.speak(); // Max makes a sound.
dog.bark();  // Max barks!

虽然写法更简洁,但Dog.prototype.__proto__仍然指向Animal.prototype,原型链机制未变。

基本上就这些。原型链的核心在于理解对象之间的链接关系,以及属性查找是如何逐层向上进行的。掌握这一点,就能真正看懂J*aScript中的“继承”是如何工作的。不复杂但容易忽略细节。

以上就是J*aScript原型继承_深入理解原型链机制的详细内容,更多请关注其它相关文章!


# 点对点  # 巴中科协网站建设方案  # 苏州推广营销网络  # seo影响付费推广效果  # 山西抖音seo排名加盟  # 张家港网站优化推广服务  # 慈溪宁波网站推广  # 安国爱采购关键词排名  # 怎么推广网站宣传产品  # 白云企业网站推广公司  # 快手短视频营销推广策略  # 就会  # 加载  # 按需  # javascript  # 如何用  # 如何使用  # 子类  # 如何实现  # 面向对象  # 的是  # speak  # new操作符  # go  # js  # java  # es6 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: poki网页游戏推荐_poki免费游戏平台入口  126邮箱账号注册 电脑版登录入口  小米14应用无法联网原因分析_小米14网络权限修复  Win11怎么关闭快速启动_Win11彻底关机设置教程  漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口  品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程  Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】  Win11怎么查看电脑配置_Win11硬件配置检测工具使用  C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果  Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】  Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式  支付宝如何设置安全保护_支付宝安全设置的全面教程  将HTML Canvas内容转换为可上传的图像文件(File对象)  AO3官方镜像站点汇总 AO3同人作品网页版直达链接  C#中解析不规范的HTML为XML 常见的坑与解决办法  高德地图公交到站提醒失败如何解决 高德提醒权限设置  内存疯狂猛猛涨价:主板销量直接腰斩!  解决J*aScript中重复选择项的确认对话框显示问题  邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧  黑猫投诉统一入口官网 消费者权益保护投诉平台  小红书网页版入口链接分享 小红书官网直接进  谷歌浏览器一键优化方案_谷歌浏览器直达主页极速不卡版  C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用  J*aScript生成器_j*ascript异步迭代  火狐浏览器占用内存高卡顿怎么办 火狐浏览器性能优化设置技巧  Python实时数据流中的动态最值查找策略  C++ typeid如何获取类型信息_C++ RTTI运行时类型识别用法  Golang如何优化CPU绑定任务分配策略_Golang CPU任务分配优化实践  AO3最新镜像入口 Archive of Our Own官方平台访问  如何使用 Excel 发布器与 Power BI 分享 Excel 洞察  在J*a里如何理解依赖关系的方向_依赖方向在模块结构中的作用  J*a递归快速排序中静态变量导致数据累积问题的解决方案  AO3最新可访问网址 Archive of Our Own官方在线入口  JUnit5/Mockito:优雅测试内部依赖与异常处理的实践  win11专注助手在哪 Win11免打扰模式设置与自动化规则【指南】  零跑汽车11月交付量达70327台 实现连续9个月正增长  汽水音乐在线解析 汽水音乐在线解析入口  Golang如何优雅处理error_Golang error处理最佳实践总结  React列表渲染与独立状态管理:避免全局状态影响局部更新  Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】  uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页  c++ 获取系统当前时间 c++时间戳获取方法  J*aScript教程:根据元素文本内容动态设置背景色  圆通快递查询实时追踪 圆通物流包裹状态快速查看  在J*a中如何隐藏复杂性_使用门面模式组织对象交互  为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法  在React函数组件中利用原生HTML5进行邮箱地址验证  押井守高度称赞《辐射4》:玩了八年都停不下来!  高德地图家和公司地址在哪设置 高德地图通勤路线设置方法【超详细】  Lar*el 8 多关键词数据库搜索优化实践 

搜索