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

原型与原型链

js中的原型与原型链

原型(prototype)

  • 定义:每个函数在创建时,都会自动拥有一个 prototype 属性,它是一个对象,包含了该函数所创建对象的共享属性和方法。比如内置的 Array 构造函数,它的 prototype 上就有 pushpop 等方法,所有通过 new Array() 创建的数组实例都能访问这些方法。
  • 示例
function Person(name) {this.name = name;
}
Person.prototype.sayHello = function() {console.log(`Hello, my name is ${this.name}`);
};
const person1 = new Person('Alice');
person1.sayHello(); // 可以访问原型上的方法

实现代码复用,避免每个实例都重新创建相同的方法,节省内存空间。

在这里插入图片描述

//true
- console.log([1, 2, 3] instanceof Object);
//trueconsole.log([1, 2, 3].__proto__.__proto__ === Object.prototype);

从上可知数组是对象

原型链

一条对象及其原型组成的链就叫做原型链。

  • 定义:当访问一个对象的属性或方法时,如果该对象自身没有这个属性或方法,JavaScript会自动到它的原型对象中查找;如果原型对象也没有,就会继续到原型对象的原型中查找,这样一层一层向上查找的链路就构成了原型链,直到查找到 Object.prototype ,其原型为 null ,查找结束。

  • 示例

function Animal() {this.eat = function() {console.log('eating');};
}
function Dog() {this.bark = function() {console.log('barking');};
}// Dog的原型指向Animal的实例
Dog.prototype = new Animal();
const dog = new Dog();
dog.bark(); // 自身方法
dog.eat(); // 通过原型链找到Animal原型上的方法

实现原型的继承,子类可以通过原型链获取父类的属性和方法。
对象都有__proto__,都指向原型对象。
在这里插入图片描述

原型链的顶层

拿person对象来看

// 1. person的原型对象
function person(...){//
}
person.__proto__ === Person.prototype
// 2. Person.prototype的原型对象
Person.prototype.__proto__ === Object.prototype
Object.prototype也是一个对象
Object.prototype.__proto__ === null

原型链 :由对象的__proto__属性串连起来的直到Object.prototype.proto(为null)的链就是原型链。

JavaScript中一切引用类型都是对象,对象就是属性的集合。

http://www.xdnf.cn/news/15938.html

相关文章:

  • 三大工厂设计模式
  • 2025杭电多校赛(2)1006 半
  • I2S音频的时钟
  • Zabbix 企业级分布式监控系统深度解析
  • Leetcode力扣解题记录--第238题(前/后缀积)
  • Windows防火墙配置详解
  • 暑期算法训练.5
  • Xilinx FPGA XCKU115‑2FLVA1517I AMD KintexUltraScale
  • day058-docker常见面试题与初识zabbix
  • 果园里的温柔之手:Deepoc具身智能如何重塑采摘机器人的“生命感知”
  • CS课程项目设计4:支持AI人机对战的五子棋游戏
  • 计算机网络中:传输层和网络层之间是如何配合的
  • buntu 22.04 上离线安装Docker 25.0.5(二)
  • 动静态库原理与实战详解
  • Pycaita二次开发基础代码解析:边线提取、路径追踪与曲线固定
  • WebAPIs事件流与事件委托与其他事件
  • 力扣15:三数之和
  • 识别PDF中的二维码
  • Android开发中卡顿治理方案
  • 通俗易懂卷积神经网络(CNN)指南
  • 【PTA数据结构 | C语言版】双连通分量
  • 【Spark征服之路-3.6-Spark-SQL核心编程(五)】
  • 处理excel/wps表格中数值格式的警告的工具和脚本
  • SQL审计、Archery实战记录
  • 代码随想录算法训练营第二十七天
  • 算法训练营DAY37 第九章 动态规划 part05
  • channel_up和lane_up
  • Promise 详解与实现:从原理到实践
  • 【设计模式C#】工厂方法模式(相比简单工厂模式更加具有灵活性和扩展性的工厂模式)
  • Day07_网络编程20250721(网络编程考试试卷)