JavaScript 原型与原型链

原型与原型链

要讨论原型与原型链,就要先了解什么是 构造函数 ,构造函数与普通函数没有太大的区别,使用 new关键字 创建实例对象的函数,就叫做构造函数。

在js中,每一个函数类型的数据都有一个 .prototype 的属性,这个属性指向一个对象,叫做 原型对象

原型对象有一个属性叫做 constructor 的属性,指向他的 构造函数

在使用构造函数构造不同的实例对象时,有些 属性方法 是相同的,如果每个实例对象都创建这些相同的属性,有些浪费,可以存在原型对象里以共享。这也是原型对象最重要的作用。

对于这些共有的属性和方法,实例对象可以直接用 点运算符 访问,原因是实例对象在本身找不到对应的属性和方法时,会查找其构造函数的原型对象。所以可以用 实例.constructor 来查看该实例的构造函数。

如果实例本身没有该属性和方法,其构造函数的原型对象也没有,会继续往原型对象上去寻找,原型链概念就呼之欲出了。

先了解 显式原型隐式原型

显式原型 是用 prototype 属性查找原型,是函数类型数据的属性,函数可以用这个方法,构造函数也可以用,找到的是这个构造函数的原型对象。

隐式原型 是用 proto 属性查找原型,是对象类型数据的属性,对象可以用这个方法,实例对象也可以用,找到的是这个实例对象的构造函数的原型对象。

原型对象 也是一个对象,也有 proto 属性,在js中,对象的构造函数是 Object() ,所以其原型对象是 Object.prototype

Object.prototype 也是一个对象,不过 Object.prototype 比较特殊,没有原型对象,或者说其_proto_指向的是 null 。所以 Object.prototype 是原型链的尽头。

如果实例本身没有该属性和方法,则寻找实例的原型对象,如果实例的原型对象也没有,则继续寻找该原型对象的原型对象,直至null。这样的顺着 proto 寻找的链状结构就叫做 原型链 ,也叫做 隐式原型链

js中,函数也是一种对象,而函数的构造函数为 Function() ,所有函数都可以看作是 Function() 的实例对象,而 Function() 本身也是函数,所以 Function() 是自己的实例对象。函数的 protoFunction.prototypeFunction.prototype 的原型对象是 Object.prototype

相关推荐
AC赳赳老秦2 分钟前
ELK栈联动:DeepSeek编写Logstash过滤规则与ES日志分析逻辑
运维·前端·javascript·低代码·jenkins·数据库架构·deepseek
csbysj20202 分钟前
Ruby 简介
开发语言
YUJIANYUE5 分钟前
asp/php日历式值班查询系统2026版
开发语言·php
FJW0208146 分钟前
Python装饰器
开发语言·python
Allen_LVyingbo8 分钟前
用Python实现辅助病案首页主诊断编码:从数据清洗到模型上线(下)
开发语言·python·安全·搜索引擎·知识图谱·健康医疗
忠实米线9 分钟前
使用lottie.js播放json动画文件
开发语言·javascript·json
CS创新实验室12 分钟前
《计算机网络》深入学:虚拟局域网(VLAN)技术与应用
开发语言·计算机网络·php·vlan·虚拟局域网
Marshmallowc12 分钟前
React页面刷新数据丢失怎么办?彻底掌握LocalStorage持久化与状态回填的最佳实践
前端·javascript·react.js
H Corey13 分钟前
Java抽象类与接口实战指南
java·开发语言·学习·intellij-idea
郝学胜-神的一滴13 分钟前
Vue国际化(i18n)完全指南:原理、实践与最佳方案
前端·javascript·vue.js·程序人生·前端框架