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)
上一篇 2022年7月22日 下午11:36
下一篇 2022年7月22日 下午11:36


相关推荐

  • 三款专业的ocr文字识别工具[通俗易懂]

    三款专业的ocr文字识别工具[通俗易懂]ocr文字识别是办公软件中不可缺少的工具,那么哪款好用呢?​这里为大家整理了三款比较好用的工具,不仅可以进行文字识别,有的还具有在线翻译的功能,简直不要太好用啦!第一款:TextScanner激活

    2022年7月2日
    33
  • NVIDIA NVLink技术

    NVIDIA NVLink技术去年年末 美国国家能源局宣布 橡树岭国家实验室和劳伦斯利弗莫尔国家实验室采用新的超算系统 获得如此 大单 的两家 IT 公司分别是 IBM 和 NVIDIA 从官方公布的信息来看 劳伦斯利弗莫尔国家实验室的新超算系统的计算速度将高达 100PetaFLOPS 每秒 10 亿亿次 而橡树岭国家实验室的全新超算系统的计算速度更为惊人 可达 150 300PetaFLOPS 这两套系统的计算速度都远超当前的

    2026年3月19日
    3
  • org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and

    org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and项目启动报错org.postgresql.util.PSQLException:Connectiontolocalhost:5432refused.CheckthatthehostnameandportarecorrectandthatthepostmasterisacceptingTCP/IPconnections.解决:swin+R打开命令框…

    2022年6月19日
    45
  • kafka和rabbitmq和activemq区别_kafka消息持久化处理

    kafka和rabbitmq和activemq区别_kafka消息持久化处理一、语言不同RabbitMQ是由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上。kafka是采用Scala语言开发,它主要用于处理活跃的流式数据,大数据量的数据处理上二、结构不同RabbitMQ采用AMQP(AdvancedMessageQueuingProtocol,高级消息队列协议)是一个进程间传递异步消息的网络协议RabbitMQ…

    2025年7月9日
    7
  • MySQL乐观锁(MySQL乐观锁)

    悲观锁与乐观锁的区别悲观锁会把整个对象加锁占为已有后才去做操作,Java中的Synchronized属于悲观锁。悲观锁有一个明显的缺点就是:它不管数据存不存在竞争都加锁,随着并发量增加,且如果锁的时间比较长,其性能开销将会变得很大。乐观锁不获取锁直接做操作,然后通过一定检测手段决定是否更新数据,这种方式下,已经没有所谓的锁概念了,每条线程都直接先去执行操作,计算完成后检测是否与其他线程存在共享数据…

    2022年4月16日
    36
  • ROC曲线及AUC值[通俗易懂]

    ROC曲线及AUC值[通俗易懂]ROC曲线参考文献:【ROC曲线与AUC值】1.介绍及引入ROC的全名叫做ReceiverOperatingCharacteristic,其主要分析工具是一个画在二维平面上的曲线——ROCcurve。平面的横坐标是falsepositiverate(FPR),即假阳性率(1−Sp1-Sp1−Sp);纵坐标是truepositiverate(TPR),即真阳性率(SnSnSn)。对某个分类器而言,我们可以根据其在测试样本上的表现得到一个TPR和FPR点对。这样,此分类器就可以映射成

    2022年5月16日
    61

发表回复

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

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