原型有一个非常重要的属性叫 prototype

一、先写一个简单的例子,看看 A的原型和A的实例 分别是什么

function A() {}
var a = new A()
console.log(a,'实例')
console.log(A.prototype,'原型对象')

控制台输出后发现,两个都是对象

区别   1.实例对象里面有一个灰色的 <prototype>(隐式原型,可通过__proto__拿到)

     2.原型对象里面多一个constructor属性,这个属性指向我们的构造器 function A()。   也就是 A.prototype.constructor = A

constructor的定义constructor 属性返回对创建此对象的数组函数的引用。

简单来说:数组实例的 constructor 等于 Array

     对象实例的 constructor 等于Object

      构造函数A的 constructor  等于 Function

由上面的 A.prototype.constructor = Aconstructor 的定义,我们可以推论出

A.prototype 是 A的一个实例

但是 A.prototype.__proto__ === Obeject.__proto__

二、再看看 实例的__proto__是什么,它和实例、原型对象的关系

function A() {}
var a = new A() console.log(a,'实例')
console.log(a.__proto__,'实例__proto__')
console.log(A.prototype,'原型对象')

结果

我们可以发现

1.a实例的 <prototype>果然用 a.__proto__拿的到

2.a.__proto__等于A.prototype

由此,我们能得出结论  实例的隐式原型等于 构造函数的 显式原型

a.__proto__ ===  A.prototype

三、原型链

仔细的同学会发现,a实例没有 constructor属性,那 a.constructor === A 吗?

当然是等于的

a没有constructor,它就会顺着原型 往上面找,于是找到 a.__proto__

a.__proto__(也就是 A.prototype)是有 constructor的

所以结论是

a.__proto__.constructor === A

A.prototype.constructor === A

js原型与原型链探究的更多相关文章

  1. Js 原型和原型链

    Js中通过原型和原型链实现了继承 Js对象属性的访问,首先会查找自身是否拥有这个属性 如果查到,则返回属性值,如果找不到,就会遍历原型链,一层一层的查找,如果找到就会返回属性值 直到遍历完Object ...

  2. 【repost】JS原型与原型链终极详解

    一. 普通对象与函数对象  JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象.下面举例说明 function f ...

  3. JS原型与原型链终极详解

    一. 普通对象与函数对象  JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象.下面举例说明 function f ...

  4. JS原型与原型链终极详解(转)

    JavaScript原型及原型链详解 一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object,Function 是JS自带的函数对象. ...

  5. 总结一下js的原型和原型链

    最近学习了js的面向对象编程,原型和原型链这块是个难点,理解的不是很透彻,这里搜集了一些这方面的资料,以备复习所用 一. 原型与构造函数 Js所有的函数都有一个prototype属性,这个属性引用了一 ...

  6. JS原型和原型链

        1 var decimalDigits = 2, 2 tax = 5; 3 4 function add(x, y) { 5 return x + y; 6 } 7 8 function su ...

  7. 深入JS原型与原型链

    要了解原型和原型链,首先要理解普通对象和函数对象. 一.普通对象和函数对象的区别 在Javascript的世界里,全都是对象,而对象之间也是存在区别,我们首先区分一下普通对象和函数对象,如下代码: f ...

  8. JS对象、原型链

    忘记在哪里看到过,有人说鉴别一个人是否 js 入门的标准就是看他有没有理解 js 原型,所以第一篇总结就从这里出发. 对象 JavaScript 是一种基于对象的编程语言,但它与一般面向对象的编程语言 ...

  9. JS面向对象之原型链

      对象的原型链 只要是对象就有原型 原型也是对象 只要是对象就有原型, 并且原型也是对象, 因此只要定义了一个对象, 那么就可以找到他的原型, 如此反复, 就可以构成一个对象的序列, 这个结构就被成 ...

  10. JS 原型与原型链

    图解: 一.普通对象 跟 函数对象 JavaScript 中,一切皆对象.但对象也有区别,分为 普通对象 跟 函数对象,Object 和 Function 是 JavaScript 自带的函数对象. ...

随机推荐

  1. consul剔除节点

    查询节点注册 curl -s http://192.168.1.1:8500/v1/catalog/service/aaa | python -m json.tool 删除注册信息 curl http ...

  2. OpenLayers学习笔记(十)— 动态加载JSON数据模拟航迹线

    在openlayers 3 上,加载本地json数据,动态绘制航迹线,以飞机当前位置为地图中心,此例子是模拟DEMO 本文链接:动态加载JSON数据模拟航迹线 作者:狐狸家的鱼 GitHub:八至 前 ...

  3. Spring Boot学习总结三

    1,mybatis在spring boot下的2种使用模式 无配置文件注解版 application.properties添加相关配置 mybatis.type-aliases-package=com ...

  4. java强引用 软引用 弱引用 虚引用

    https://www.cnblogs.com/yw-ah/p/5830458.html Java四种引用包括强引用,软引用,弱引用,虚引用. 强引用: 只要引用存在,垃圾回收器永远不会回收Objec ...

  5. [Luogu 4316] 绿豆蛙的归宿

    题目链接 一道基础的 \(DAG\) 上期望 \(DP\). 给出一个有向无环图,起点为 \(1\) 终点为 \(N\),每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都能够到达终点. ...

  6. 局域网配置dnsmasq

    一.安装dnsmasq centos下安装dnsmasq: yum install dnsmasq 二.配置dnsmasq: 1.编辑配置文件/etc/dnsmasq.conf # 配置上行DNS,对 ...

  7. 将图片转为base64

    DEMO: <input type="file" id="file" multiple="multiple"> <div ...

  8. DirectX11 With Windows SDK--27 计算着色器:双调排序

    前言 上一章我们用一个比较简单的例子来尝试使用计算着色器,但是在看这一章内容之前,你还需要了解下面的内容: 章节 26 计算着色器:入门 深入理解与使用缓冲区资源(结构化缓冲区/有类型缓冲区) Vis ...

  9. Golang入门教程(二)Ubuntu16.04下安装golang(实例:Golang 定时任务管理器)

    通过两种方式安装 一.通过apt-get安装1.安装 sudo apt-get install golang 2.设置GOPATH变量 GOPATH是扩展库的目录,Go先搜索标准库目录,然后搜索GOP ...

  10. 2、搭建一个简单的Web项目

    一.创建一个Web项目: 1.File->new Project->Java->JavaEE->Web Application 2.为项目起名: 3.配置项目:在项目上击右键- ...