首页 > 编程语言 >关于javaScript中的__proto__和prototype

关于javaScript中的__proto__和prototype

时间:2023-01-17 15:56:32浏览次数:46  
标签:__ 函数 Fn1 proto 对象 javaScript prototype

区别:

__proto__是浏览器对实例化对象中[[prototype]]属性的命名方式,__proto__是属于对象的属性,prototype是属于函数对象的属性。

__proto__指向[函数名].prototype,[函数名].prototype是函数的原型对象

示例:
function Fn1(...){...}; // 函数Fn1
let obj1 = new Fn1(...); // new关键字,会将Fn1以构造函数的形式调用,构造一个对象
obj1.__proto__ === Fn1.prototype; // true

obj1.__proto__指向Fn1.prototype(Fn1的原型对象)。

个人解读:

区别:

prototype可以理解为在函数(函数对象)上的一个名为原型对象的属性,这里的原型对象是命名和功能意义双重含义的,所以prototype是函数(函数对象)上的一个属性,保存原型对象,意义上也可以叫做原型对象。那么这个原型对象的内容是一些可以继承的属性和方法。而__proto__是对象上的一个属性,通过这个属性可以访问prototype这个函数对象上的属性里的内容,也就是说对象.__proto__指向构造该对象的函数.prototype

当然,由于函数在js语言中也是对象,所以也有__proto__属性,指向构造该函数的Function.prototype,而Function.prototype这个原型也是对象,所有也有它的__proto__属性,以此类推,这就形成了一条原型链,链子的尽头是Object.prototype的__proto__,为null,这个Object非特指某一个对象,而是实际的构造所有对象的函数。

补充:

这里还要提一下constructor这个属性,理解为构造器,该属性是函数,并挂载在函数的prototype属性上。每一个由函数构造而来的对象都有一个constructor属性(继承于构造该对象的函数),该属性功能为访问(获取)构造该对象的构造函数,按以下示例理解

还是这个示例:

function Fn1(...){...}; // 函数Fn1
let obj1 = new Fn1(...); // new关键字,会将Fn1以构造函数的形式调用,构造一个对象

该函数.prototype.constructor === 该函数。该函数构造的对象.constructor继承自该函数.prototype.constructor === 该函数

Fn1.prototype.constructor === Fn1。obj1.constructor === Fn1.prototype.constructor === Fn1

标签:__,函数,Fn1,proto,对象,javaScript,prototype
From: https://www.cnblogs.com/szq233/p/17057980.html

相关文章

  • 使用StringBuilder反转字符串
    使用StringBuilder反转字符串importjava.util.Scanner;/*需求:定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果例如,键盘录入abc,输出结......
  • docker
    dockerdockerrun-e'ACCEPT_EULA=Y'-e'SA_PASSWORD=sa123SA?'-p33062:1433--namesqlserver-dliaisonintl/mssql-server-linuxdockerrun-eMYSQL_ROOT_PAS......
  • 如何在EXCEL VBA中从DATE格式更改为数字?
    我将项目存储在字典中,其中键为date,例如'2012/05/11'。默认情况下,该键被改为数字(41040)。当我想要检索该项目时,我需要通过编号:dFRmonths.Item(41040)来引用它。由于dFRmonths......
  • 【git】git常用命令
    1.初始化本地仓库可选,如果不指定,将使用当前目录gitinit<directory>2.添加文件到暂存区gitadd<file>添加当前目录中的所有文件:gitadd.3.提交更改gitcommi......
  • ES6-新增方法
    一。字符串的includes方法:   应用:   //将网址加上后面的键值//https://www.imooc.com/course/list//https://www.imooc.com/......
  • 实现微服务--匹配系统(下)
    这节课,匹配系统最后一章。完善之前的傻瓜式匹配(只要有人就会匹配到一起),新增判断天梯分机制。微服务就是另开一个独立的程序用来实现某一功能。MultiValueMap与普通Map的......
  • python zipfile处理压缩文件
    目录pythonzipfile处理压缩文件ZIP文件入门什么是ZIPFile?为什么使用ZIPFiles?Python能处理ZIP文件吗?使用Python的zipfile操纵已存在的ZIP文件打开ZIP文件......
  • ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi
    摘要-本文提出了ORB-SLAM3,第一个系统能够执行视觉,视觉惯导以及多地图的SLAM系统,且该系统具有单目,双目,RGB-D相机模型,用针孔相机和鱼眼镜头模型。第一个主要的创新是基于特......
  • 个人使用 sudo 方法
    sudo作用:允许系统管理员授予某些用户或用户组以其他用户身份运行某些或所有命令的权限su用于变更为其他使用者的身份的命令,一般需要键入该使用者的密码sudo则是......
  • vue 如何将打包时间记录到html的head里面
    在vue.config.js文件中,对chainWebpack的配置进行设置chainWebpack(config){config.plugin('html').tap(args=>{constdate=newDate()......