【JavaScript】原型与原型链

1、函数的 prototype 属性(显性原型)

  1. 每个函数都有一个 prototype 属性,指向原型对象(是一个空对象,空对象的意思是没有添加的其他属性)
  2. 原型对象有一个属性 constructor 指向函数对象

2、实例对象的__proto__属性(隐性原型)

  1. 每个实例对象都一个__proto__属性,指向原型对象(和其构造函数的 prototype 属性一样,既 prototype===__proto__

3、显性原型和隐性原型的使用

function Fn(){}//定义一个函数 Fn()
Fn.prototype.test = function(){}//往函数 Fn 的原型对象上添加一个函数 test()
var fn = new Fn();//创建一个函数 Fn() 的实例对象 fn
fn.test();//fn 可以调用之前添加在函数 Fn 原型对象上的函数 test()

4、原型链(别名:隐性原型连)

访问一个属性的顺序:

  1. 首先在自身属性上查找,找到返回
  2. 自身属性上没有,沿着__proto__往下查找,找到返回
  3. 最终没有找到,则返回 undefined

ps:a.test 是调用属性,a.test() 是调用方法。没有找到时返回的也不一样,前者返回 undefined ,后者报错 not a function

原型链的特点:

  1. 函数的显示原型指向对象默认是个空 Object 实例对象(但是 Object 不满足,它指向的是 null,是原型链的尽头 )
  2. 所有的函数都是 Function 的实例对象(包括 Function),所以每个函数的__proto__都是相同的

参考链接1
参考链接2

总关系图
image

5、原型链的缺点

  1. 当有多个实例对象时,其中一个实例对象通过原型链修改了属性,其他的实例对象获得的属性值也会修改
  2. 无法通过往父类传参
posted @   RikkaXl  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示