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

原型与原型链

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.dtcms.com/a/291085.html

相关文章:

  • 二维码扫描登录流程详解
  • 【Elasticsearch】settings
  • 解密分账系统:企业资金管理的智能中枢
  • Linux的相关指令
  • 京东商品评论如何获取?API接口实战指南
  • Kali MSF渗透Windows 11电脑
  • Linux_gdb调试器--进程概念
  • Linux初识网络
  • MySQL 核心知识点梳理(3)
  • buntu 22.04 上离线安装Docker 25.0.5(二)
  • 如何升级到macOS Tahoe:全面指南与实用步骤
  • LeetCode 每日一题 2025/7/14-2025/7/20
  • Mysql(存储过程)
  • 图像编辑开源数据项目
  • 了解 ReAct 框架:语言模型中推理与行动的协同
  • 疯狂星期四文案网第14天运营日记
  • DBSCAN聚类算法
  • OpenAI API(1)补全Responses(Chat Completions)API和记忆Assistants API对比分析
  • 牛客周赛 Round 101(题解的token计算, 76修地铁 ,76选数,76构造,qcjj寄快递,幂中幂plus)
  • 使用pymongo进行MongoDB的回收
  • JAVA高级第七章输入和输出处理(二)
  • 前缀和题目:元素和小于等于阈值的正方形的最大边长
  • PostgreSQL高可用架构Repmgr部署流程
  • 按需搭建web网站
  • 【2025】Vscode Python venv虚拟环境显示“激活终端”成功但是在终端中“并没有激活成功”,pip安装还是会安装到全局环境中的解决方法;
  • CataPro本地安装教程--No GPU--cpu only模式--网络资料整理
  • Android Navigation 组件:简化应用导航的利器
  • [硬件电路-67]:模拟器件 - 高输入阻抗、低输出阻抗本质:最小化能量的汲取,最大化能量传递
  • Dynamics 365 Contact Center是什么
  • NX636NX644美光固态闪存NX663NX665