怎么理解JavaScript原型、原型链

原型

JavaScript被描述为一种基于原型的语言,也就是每一个对象都拥有一个原型对象。

当我们访问一个对象的属性时,它不仅仅该改对象上查找,还会到这个对象的原型上查找,甚至是到这个对象的原型的原型上查找,这样一层一层向上查找,直到找到匹配的属性或者是到达原型链的顶端。

这些属性和方法是定义在Object的构造函数上的prototype属性上。而并不是实例对象本身。

比如:函数可以有属性,每一个函数都有一个特殊的属性叫做原型prototype,这个原型prototype是一个对象,也就是原型对象。

原型对象上自带一个属性constructor,这个属性指向函数。

原型链

原型对象也可能拥有原型,并且从中集成方法和属性,一层一层、以此类推。这种关系就是原型链,这就是为什么任何一个对象会拥有定义在其他对象中的属性和方法的原因。

在对象实例和它们的构造函数之间建立起一个链接,通过_proto_属性访问原型对象的原型对象,prototype属性访问到实例的构造函数。

总结:

  1. 一切对象都是集成于Object对象,Object对象直接直接继承根源对象null
  2. 一切函数对象,都是继承于Function对象
  3. Object对象直接继承于Function对象
  4. Function对象的__proto__会指向自己的原型对象,最终还是继承于Object对象。

这就是关于原型和原型链的笔记,希望对你有所帮助!

相关推荐
小陈工1 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
H Journey1 小时前
C++之 CMake、CMakeLists.txt、Makefile
开发语言·c++·makefile·cmake
午安~婉5 小时前
Electron桌面应用聊天(续)
前端·javascript·electron
lly2024065 小时前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨5 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn9995 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏4945 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
功德+n6 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
明日清晨6 小时前
python扫码登录dy
开发语言·python
我是唐青枫6 小时前
C#.NET gRPC 深入解析:Proto 定义、流式调用与服务间通信取舍
开发语言·c#·.net