彻底搞懂js __proto__ prototype constructor
在开始之前,必须要知道的是:对象具有__proto__、constructor(函数也是对象固也具有以上)属性,而函数独有prototype
在博客园看到一张图分析到位很彻底,这里共享:

刚开始看这图很懵,根本看不懂,但是细品,多品后恍然大悟,然后总结出以下几点,很重要切记
1、切记:对象的内置属性__proto__一定指向的是它构造函数的原型对象
2、切记:对象的内置属性__proto__.__proto__一定指向Object原型对象(Object.prototype)
3、切记:对象的内置属性__proto__.__proto__.__proto__一定最终为null
4、切记:每个函数都具有独有的prototype,这个对象包含了此函数的所有实例共享的属性和方法(函数=》对象)
5、切记:对象的属性__proto__指向的是其构造函数的原型对象(对象=》对象),而对象的属性constructor指向的是其构造函数(对象=》函数)
一定要把上面几句彻底搞懂,然后随便上几个例子
var abc = {};
=====================
var abc1= "111";
=====================
var abc2=123;
=====================
function abc3(){}
=====================
var abc4=new Date();
=====================
function AcFun(){};
var abc5=new AcFun();
=====================
看打印结果:
console.log(abc.__proto__ === Object.prototype); //true
console.log(abc1.__proto__ === String.prototype); //true
console.log(abc2.__proto__ === Number.prototype); //true
console.log(abc3.__proto__ === Function.prototype); //true
console.log(abc3.prototype.__proto__ === Object.prototype); //true
console.log(abc4.__proto__ === Date.prototype); //true
console.log(abc5.__proto__ === AcFun.prototype); //true
console.log(AcFun.prototype.__proto__ === Object.prototype); //true
console.log(AcFun.__proto__ === Function.prototype); //true
console.log(abc4.__proto__.__proto__ === Object.prototype); //true
console.log(abc4.__proto__.__proto__.__proto__ === null); //true
console.log(abc3.constructor === Function); //true
console.log(abc5.constructor === AcFun); //true
console.log(abc3.constructor.__proto__=== Function.prototype); //true
console.log(abc3.constructor.__proto__.__proto__ === Object.prototype); //true
console.log(abc3.prototype.__proto__.constructor === Object); //true
console.log(AcFun.prototype.constructor === AcFun); //true
console.log(AcFun.__proto__.constructor === Function); //true
最后总结:所有对象都有属性__proto__及constructor(包括函数),只有函数独有prototype,所有对象的__proto__都指向其构造函数的原型(对象),consturctor指向的其构造函数(函数),而函数的prototype则指向其函数原型对象(对象),及f1.__proto__ === Foo.prototype、f1.constructor === Foo
彻底搞懂js __proto__ prototype constructor的更多相关文章
- 帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...
- 彻底搞懂 JS 中 this 机制
彻底搞懂 JS 中 this 机制 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog 目录 this 是什么 this 的四种绑定规 ...
- 让你彻底搞懂JS中复杂运算符==
让你彻底搞懂JS中复杂运算符== 大家知道,==是JavaScript中比较复杂的一个运算符.它的运算规则奇怪,容易让人犯错,从而成为JavaScript中“最糟糕的特性”之一. 在仔细阅读了ECMA ...
- 一文搞懂 js 中的各种 for 循环的不同之处
一文搞懂 js 中的各种 for 循环的不同之处 See the Pen for...in vs for...of by xgqfrms (@xgqfrms) on CodePen. for &quo ...
- 彻底搞懂js原型与原型链
原生的原型链 function fn(){},fn 为 Function的一个实例,原型链为 null -> Object -> Function -> fn: fn.__proto ...
- Spirit带你彻底搞懂JS的6种继承方案
JavaScript中实现继承的6种方案 01-原型链的继承方案 function Person(){ this.name="czx"; } function Student(){ ...
- 一文搞懂js中的typeof用法
基础 typeof 运算符是 javascript 的基础知识点,尽管它存在一定的局限性(见下文),但在前端js的实际编码过程中,仍然是使用比较多的类型判断方式. 因此,掌握该运算符的特点,对于写出好 ...
- 通过一张简单的图,让你彻底地搞懂JS的==运算
大家知道,JavaScript中的==是一种比较复杂运算,它的运算规则很奇怪,很容易让人犯错,从而成为JavaScript中“最糟糕的特性”之一. 在仔细阅读ECMAScript规范的基础上,我画了一 ...
- 晨叔技术晨报: 你真的搞懂JS中的“值传递”和“引用传递”吗?
晨叔周刊,每周一话题,技术天天涨. 本周的话题是JS的内存问题(加入本周话题,请点击传送门). 图 话题入口 今天的技术晨报来,就来谈谈JS中变量的,值传递和引用传递的问题.现在,对于很多的JSer来 ...
随机推荐
- 调试HotSpot源代码(配视频)
本文将详细介绍在Ubuntu16.04 LTS上对OpenJDK8进行编译,为了方便大家快速搭建起OpenJDK8的调试开发环境,我还录制了对应的视频放到了B站上,大家可以参考. 视频地址:https ...
- 客户的一个紧急bug,我用了两种方式进行 C# 反编译修改源码
一:背景 1. 讲故事 周五下午运营反馈了一个紧急bug,说客户那边一个信息列表打不开,急需解决,附带的日志文件也发过来了,看了下日志大概是这样的: 日期:2020-11-13 12:25:45,92 ...
- Ceph中的Copyset概念和使用方法
前言 copyset运用好能带来什么好处 降低故障情况下的数据丢失概率(增加可用性) 降低资源占用,从而降低负载 copyset的概念 首先我们要理解copyset的概念,用通俗的话说就是,包含一个数 ...
- Check Host:实时监控网站或者服务器是否可以访问
如果你拥有一个网站,那么最重要的事情就是要保证它24小时都能够访问.不过国内的虚拟主机服务非常糟糕,经常会出现各种状况,所以我们需要一个软件,可以让我们第一时间知道网站出现了无法访问的情况,从而通知售 ...
- WeihanLi.Npoi 1.13.0 更新日志
WeihanLi.Npoi 1.13.0 更新日志 Intro 在 Github 上收到 Issue 收到网友反馈希望支持自动分 Sheet 导出,有兴趣的可以参考 Issue https://git ...
- Model class apps.goods.models.GoodsType doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS
在admin.py注册这个model时,报了个错: RuntimeError: Model class apps.goods.models.GoodsType doesn't declare an e ...
- 20-SAP PI开发手册-ERP发布服务供外部系统调用(sproxy代理类)
一. 接口内容 接口详细信息 1. 字段对应关系 发送字段对应关系 返回字段对应关系 2. 报文信息 传入报文(报文结构,外围系统提供) 1 <?xml version=" ...
- guitar pro 系列教程(六):Guitar Pro音频导出功能之RSE音源
让我们继续进行guitar pro的教程 上一章节,我们讲解了guitar Pro的播放与显示功能,在Guita pro的音源选择中分为两类,一种是自带的RES高保真音源,一种是MIDI输入音源.如果 ...
- FL studio系列教程(二):水果的强大功能
作为音乐人,在电脑上进行编曲,混音,合成是家常便饭,而市面上大家常用的音乐编曲制作软件很多,小编在这里就给大家做一个推荐. 大家常听到的音乐编曲制作软件大多是Cubase.Nuendo.Pro Too ...
- 接入twitter第三方登陆接口遇到的一个问题
本地开了 Shadowsocks,然后postman模拟的twitter的接口是请求成功的,然后用php-curl去请求网址,出现以下错误 Failed to connect to api.twitt ...