js-函数的prototype

js-函数的prototypeDockerfile

大家好,又见面了,我是你们的朋友全栈君。

1、 函数的prototype属性

  • 每个 函数 都有一个prototype属性(是一个object类型数据),它默认指向一个object空对象(即称为:原型对象)
 console.log(typeof Date.prototype) //object
 console.log(Date.prototype) //如图1所示
 function fun(){ 
   }
 console.log(fun.prototype)   //默认指向一个object空对象(没有我们的属性)

在这里插入图片描述图1
在这里插入图片描述图2

/* Date函数的流程基本就是 首先创建一个Date函数, 然后通过Date.prototype(指向原型对象)向Date函数原型对象中添加很多方法 如下:以函数fun为例 */
 function fun(){ 
   }
 fun.prototype.test = function(){ 
   }
  console.log(fun.prototype)

在这里插入图片描述

  • 原型对象中有一个属性constructor,他指向函数对象
// 原型对象中有一个属性constructor,他指向函数对象
console.log(Date.prototype.constructor === Date)  // true
console.log(fun.prototype.constructor === fun)  // true

2、 给原型对象添加属性(一般都是方法)

  • 作用:函数的所有实例对象自动拥有原型中的属性(方法)
/* 给原型对象添加属性(一般都是方法)===》实例对象可以访问 */
 function Fun(){ 
   }
 Fun.prototype.test = function(){ 
   
 console.log('test()')
}
var fun =  new Fun() // 实例化对象
fun.test() //test() 实例对象可以直接访问

3、 显式原型与隐式原型

  • 每个函数function都有一个prototype,即显式原型
  • 每个实例对象都有一个__proto__,即隐式原型
  • 对象的隐式原型的值为其对应的构造函数的显式原型的值
/* 每个**函数function**都有一个prototype,即显式原型,默认指向一个object空对象 */
function Fn(){ 
        //内部语句:this.prototype = {}
}
console.log(Fn.prototype)
/* 每个**实例对象**都有一个__proto__,即隐式原型,默认指向一个object空对象 */
var fn =  new Fn() // 实例化对象,内部语句:this.__proto__ = Fn.prototype
console.log(fn.__proto__)

/* 对象的隐式原型的值为其对应的构造函数的显式原型的值,引用地址值相同,指向同一个对象 */
console.log(Fn.prototype === fn.__proto__)   //true


Fn.prototype.test = function(){ 
   
console.log('test()')
}
fn.test()   // test() 对象可以直接访问自己__proto__里面的属性和方法,本质上 对象的__proto__与其构造函数的prototype 指向的是同一个对象

在这里插入图片描述

  • 内存结构
    在这里插入图片描述
  • 总结:
    (1)对象的prototype属性:在定义函数时自动添加的,默认值是一个空object对象
    (2)对象的__proto__属性:创建对象时自动添加的,默认值是构造函数的prototype属性值
    (3)程序员可直接操作显式原型,但不能操作隐式原型(es6之前)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163403.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker常用命令详解

    docker常用命令详解

    2021年6月1日
    85
  • RRC信令过程概述

    RRC信令过程概述1RRC 协议功能为 NAS 层提供连接管理 消息传递等服务 对接入网的底层协议实体提供参数配置的功能 负责 UE 移动性管理相关的测量 控制等功能 2 nbsp RRC 状态 RRC IDLE nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp PLMN 选择 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp NAS 配置的 DRX 过程 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 系统信息广播和寻呼 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 邻小区测量 nbsp nbsp nbsp nbsp

    2025年9月18日
    4
  • mysql行转列函数_mysql行转列,函数GROUP_CONCAT(expr)

    mysql行转列函数_mysql行转列,函数GROUP_CONCAT(expr)demo:语句:SELECT’行’id,”product_nameUNIONSELECTid,product_nameFROM`product`WHEREid<5结果:行1icbc2测试测试314笔记本电脑语句:SELECT’行转列后’id,”product_nameUNIONSELECTGROUP_CONCAT(id)id,GROUP_CONCA…

    2022年5月6日
    2.6K
  • 差分数组(简单易懂)

    差分数组(简单易懂)一、什么是差分数组?差分数组本质上来说就是一个数组,可以用O(1)的时间处理区间修改。二、差分数组的定义式设原数组为a数组,差分数组为d数组,则对于i∈[2,n],都有d[i]=a[i]-a[i-1].三、差分数组的性质1.当我们需要更新区间[l,r]时候(仅指加减运算),我们仅仅可以只更新d[l]+=x,d[r+1]-=x;2.当我们需要单独查询原数组一个点的值的时候,我们不难发现出令Sn为di的前缀和,那么a[i]=Si;3.当我们需要求原数组的前缀和的时候,我们可以设前x项

    2022年5月20日
    49
  • accept text/html,Accept_标题 | Headers_HTTP_参考手册_非常教程

    accept text/html,Accept_标题 | Headers_HTTP_参考手册_非常教程AcceptAccept请求的HTTP标头通告了内容类型,并表示为MIME类型,客户端是能够理解的。使用内容协商,服务器然后选择其中一个提议,使用它并通过Content-Type响应头通知客户它的选择。浏览器根据请求完成的上下文为此标头设置足够的值:在获取CSS样式表时,为请求设置的值与获取图像,视频或脚本时的值不同。HeadertypeRequestheaderForbidden…

    2022年7月26日
    13
  • monkey稳定性测试「建议收藏」

    monkey稳定性测试「建议收藏」稳定性测试定义:是指软件长时间的持续运行,系统版本是否稳定,是否持续的为客户提供服务。指标:异常的次数,异常的频率稳定性如何实施?使用monkey向系统发送随机的用户事件流,实现对正在开发的应用程序进行稳定性测试,更好的模拟用户操作adbshellmonkey可以查看所有的命令usage:monkey[-pALLOWED_PACKAGE[-pALLOWED_PACKAGE]…][-cMAIN_CATEGORY[-cMAIN_CATEGORY]…][–ignore-cra

    2025年8月31日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号