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

JavaScript 构造函数、原型和原型链

目录

  • 前言
  • 一、构造函数与对象的关系
  • 二、何为构造函数
  • 三、命名约定
  • 四、原型
  • 五、原型链如何形成
  • 结尾

前言

依据《JavaScript权威指南》和两年间的理解,对以前的文章作出补充.

2022年文:
【JavaScript 原型、继承、原型链 】


一、构造函数与对象的关系

构造函数产生对象.

我们说原型对象原型对象,prototype的值必是对象类型(Javascript里各种类型都可以说是对象,要指名是对象的时候就说对象类型).

通过new一个构造函数的方式创建对象,对象的原型prototype与构造函数的prototype相同,对象的构造函数constructor为该构造函数.

Mozilla实现的Javascript暴露了__prototype__属性用于直接读写对象的原型,不推荐使用,因为并非所有浏览器都实现.


二、何为构造函数

写法上与普通函数没有区别,但构造函数就是用来new实例化对象的,将其作为正常函数调用,通常无法正常工作,而正常的函数能够完成任务.
任何Javascript函数都可以当做构造函数使用(能不能正常工作另说).


三、命名约定

构造函数名应当大写以区别于普通函数和方法,因为定义构造函数相当于定义类.
因为通过同一个构造函数实例化的所有对象都继承自同一个对象,因此所有的对象都是同一个类的成员.


四、原型

调用函数需要用到prototype属性,所以每个构造函数自动拥有一个prototype属性(Function.bind()返回的函数没有prototype),其唯一的值为实例化出该原型对象的constructor.


五、原型链如何形成

原型prototype内有用于实例化它的constructor,前面提到constructor作为函数自动拥有prototype属性,内部有唯一一属性constructor,constructor内又自动有prototype,内部有唯一属性constructor,这是无限的,所以输出一个对象的时候,constructor或者prototype那一行总是能无限展开.

以上的代码示意,即原型链中各原型对象的构造函数相同

const fun = function ab() {}

// fun == fun.prototype.constructor
/* fun.prototype.constructor.prototype.constructor
 == 
fun.prototype.constructor.prototype.constructor.prototype.constructor;
 */

结尾

如有疏漏,请为我指正,谢谢.


http://www.kler.cn/a/319214.html

相关文章:

  • 微信小程序——01开发前的准备和开发工具
  • NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备:大华IPC摄像头局域网访问异常解决办法
  • Linux—进程学习-02
  • SpringBoot(十八)SpringBoot集成Minio
  • 《Python网络安全项目实战》项目5 编写网站扫描程序
  • CSS回顾-长度单位汇总详解
  • 芝士派(百宝箱):阿里系智能体平台降临啦
  • python编程开发“人机猜拳”游戏
  • 财务报表中科目的指标值范围
  • web学习——day1
  • Python精选200Tips:166-170
  • Redis中String命令的基础操作
  • 简单工厂模式
  • SQL常用语法详解
  • SelMatch:最新数据集蒸馏,仅用5%训练数据也是可以的 | ICML‘24
  • 【深度学习】聊一聊正则化
  • C++之 string(中)
  • 1.1 elasticsearch分布式集群基本搭建(centos7.x + elaticsearch7.11.1)
  • 【代码随想录训练营第42期 Day60打卡 - 图论Part10 - Bellman_ford算法系列运用
  • 什么是集成学习?
  • 如何使用ssm实现基于VUE.js的在线教育系统+vue
  • Go调试工具—— Delve
  • 2024 ICPC ShaanXi Provincial Contest —— C. Seats(个人理解)拓扑+dfs
  • 深度学习(4):torch.nn.Module
  • flink 的 Barrier 对齐 的优劣详解:
  • PHP 中 empty() 函数的作用