js原型链的说明

首先需要明确的是:只有对象有__proto__属性,而函数只有prototype属性,没有__proto__属性,函数的原型有一个constructor属性,指向的是函数本身!

Function是Object的构造函数,而Object又是function的构造函数,也就是Object是Function.prototype原型的构造函数。
对于上面的javascript图的原型链而言,一切说明如下代码所演示的一样:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title></title>
<script src="jquery-1.9.1.min.js"></script>
</head>
<body>
<script type="text/javascript">
function Person(name,age){
this.name = name;
this.age = age;
}
var a =new Person("zhagns",2);
//无论是内置函数Object、Function还是自定义的函数本身都是一个对象,只要是对象就有__proto__原型对象,
//这个原型对象指向的都是Function.prototype
console.log(Person.__proto__===Function.prototype);
//对于Function函数来说又是特殊的,因为它是一个函数,所以它本身是一个对象,也就是它的__proto__属性一定是指
//向Function.prototype;所以Function自身的__proto__指向的是
//自身的prototype,这和其它的内置函数或者自定义函数又是不同的
console.log(Function.__proto__ === Function.prototype);
//无论是自定义的函数还是内置的Function函数,他们的原型又是一个对象,是对象就有__proto__属性,也就是他们的原
//型对象是Object.prototype,而Object.prototype也是一个Object类型的对象,它的__proto__原型对象是null。
console.log(Person.prototype.__proto__=== Object.prototype);
//对象的类型是Object,
console.log(typeof a)
console.log(a instanceof Object);
console.log(a instanceof Function)
console.log(Object.prototype);
console.log(typeof Object.prototype);
console.log(Object.prototype.__proto__);
//对与Function的prototype而言有点特殊,它不是一个Object类型的对象,而是一个function类型的对象,而且其原型对象是Object.prototype。
console.log(Function.prototype);
console.log(typeof Function.prototype)
console.log(Function.prototype.__proto__);
console.log(typeof Function.prototype.__proto__);
console.log(Object.prototype === Function.prototype.__proto__);
console.log(Object.prototype.__proto__);
//对象的类型是Object,而任何函数都是function类型的;也就是任何函数[自定义函数还是内置的Object、Function函数]都是function类型的!
console.log(typeof Person)
console.log(typeof Object)
console.log(typeof Function)
//任何函数都是Function的实例,同时任何函数也都是Object的实例!
console.log(Function instanceof Object)
console.log(Object instanceof Function)
//综上:Function有2点特殊的地方:
//1.它的__proto__原型对象指向的是自身的prototype属性。
//2.它的prototype不是Object类型的对象,而是一个function类型的对象,而且这个对象的原型对象是Object.prototype。 </script>
</body>
</html>
输出结果如下所示:
[Web浏览器] "true" /FirstProject/index1.html (17)
[Web浏览器] "true" /FirstProject/index1.html (21)
[Web浏览器] "true" /FirstProject/index1.html (24)
[Web浏览器] "object" /FirstProject/index1.html (26)
[Web浏览器] "true" /FirstProject/index1.html (27)
[Web浏览器] "false" /FirstProject/index1.html (28)
[Web浏览器] "[object Object]" /FirstProject/index1.html (29)
[Web浏览器] "object" /FirstProject/index1.html (30)
[Web浏览器] "null" /FirstProject/index1.html (31)
[Web浏览器] "function Empty() {}" /FirstProject/index1.html (33)
[Web浏览器] "function" /FirstProject/index1.html (34)
[Web浏览器] "[object Object]" /FirstProject/index1.html (35)
[Web浏览器] "object" /FirstProject/index1.html (36)
[Web浏览器] "true" /FirstProject/index1.html (37)
[Web浏览器] "null" /FirstProject/index1.html (38)
[Web浏览器] "function" /FirstProject/index1.html (40)
[Web浏览器] "function" /FirstProject/index1.html (41)
[Web浏览器] "function" /FirstProject/index1.html (42)
[Web浏览器] "true" /FirstProject/index1.html (44)
[Web浏览器] "true" /FirstProject/index1.html (45)
js原型链的说明的更多相关文章
- JS原型链
		
JS作为发展了多年了对象语言,支持继承,和完全面向对象语言不同的是,JS依赖原型链来实现对象的继承. 首先JS的对象分两大类,函数对象和普通对象,每个对象均内置__proto__属性,在不人为赋值__ ...
 - 深入分析JS原型链以及为什么不能在原型链上使用对象
		
在刚刚接触JS原型链的时候都会接触到一个熟悉的名词:prototype:如果你曾经深入过prototype,你会接触到另一个名词:__proto__(注意:两边各有两条下划线,不是一条).以下将会围绕 ...
 - js原型链与继承(初体验)
		
js原型链与继承是js中的重点,所以我们通过以下三个例子来进行详细的讲解. 首先定义一个对象obj,该对象的原型为obj._proto_,我们可以用ES5中的getPrototypeOf这一方法来查询 ...
 - JS 原型链图形详解
		
JS原型链 这篇文章是「深入ECMA-262-3」系列的一个概览和摘要.每个部分都包含了对应章节的链接,所以你可以阅读它们以便对其有更深的理解. 对象 ECMAScript做为一个高度抽象的面向对象语 ...
 - 深入理解JS原型链与继承
		
我 觉得阅读精彩的文章是提升自己最快的方法,而且我发现人在不同阶段看待同样的东西都会有不同的收获,有一天你看到一本好书或者好的文章,请记得收藏起来, 隔断时间再去看看,我想应该会有很大的收获.其实今天 ...
 - js 原型链和继承(转)
		
在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的 new 到底是干什么的 1. 什么是 JS 原型链? 我们知道 JS 有对象,比如 var ob ...
 - 一张图看懂 JS 原型链
		
JS 原型链,画了张图,终于理清楚各种关系有木有 写在最后: __proto__是每个对象都有的一个属性,而prototype是函数才会有的属性!!! function Person() { } 是函 ...
 - 简单粗暴地理解js原型链–js面向对象编程
		
简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...
 - JS原型链与继承别再被问倒了
		
原文:详解JS原型链与继承 摘自JavaScript高级程序设计: 继承是OO语言中的一个最为人津津乐道的概念.许多OO语言都支持两种继承方式: 接口继承 和 实现继承 .接口继承只继承方法签名,而实 ...
 - 02 js原型链
		
1 js原型链是一个绕不开的话题.直接上说吧. /** * 1. js里的原型链是怎么样的? 带class 和不带class的原型链的不同. */ const util = require('util ...
 
随机推荐
- 读书笔记-iOS核心动画高级技巧
			
如果不使用+imageNamed:,那么把整张图片绘制到CGContext可能是最佳的方式了. 这里我们利用了CALayer的KVC来存储和检索任意的值,将图层和索引打标签. 使用KVC打标签
 - 过滤器会拦截  前端页面加载 js文件的请求
			
学艺不精啊.....之前就总结过博客: JAVA中解决Filter过滤掉css,js,图片文件等问题 结果现在又犯了老错误~ 情况如下: index.jsp 页面的验证码输入栏绑定了异步验证(jQur ...
 - redis的基本介绍
			
redis是什么? redis是一种菲关系型数据库,存储key-value类型的数据. redis支持的数据类型 这里所说的数据类型其实就是value对应的数据类型.一共有五种: String 1.S ...
 - 只读事务@Transactional(readOnly = true)
			
定义 从设置的时间点(时间点beta)开始到事务结束的过程中,该事务将看不见其他事务所提交的数据,即查询中不会出现别人在beta之后提交的数据. 应用场合 对于一个函数,如果执行的只是 ...
 - Ubuntu14.04设置开机启动脚本(转)
			
原文:https://www.magentonotes.com/ubuntu-config-autostart-shell-script.html 方法一:将脚本添加到文件/etc/rc.local ...
 - 第一节:Git下载和安装
			
1.下载并安装github客户端:https://desktop.github.com/ 2.进入自己的主页,新建一个项目:
 - 腾讯互动课堂(Tencent Interact Class,TIC)SDK 词汇表
			
词汇表 https://cloud.tencent.com/document/product/266/11732 封装格式 封装格式(Format)是将已经编码压缩好的视频流和音频流按照一定的格式规范 ...
 - (3.16)mysql基础深入——mysql字符集
			
(3.16)mysql基础深入——mysql字符集 关键字:mysql字符集,mysql编码 目录 1.概念 2.常用的字符编码 3.查看mysql字符集 [3.1]查看服务器支持的字符集 [3.2] ...
 - 前端 HTML 标签分类
			
三种: 1.块级标签: 独占一行,可设置宽度,高度.如果设置了宽度和高度,则就是当前的宽高.如果宽度和高度没有设置,宽度是父盒子的宽度,高度根据内容填充. 2.行内标签:在一行内显示,不能设置宽度,高 ...
 - 火币网API文档——REST 行情、交易API简介
			
REST API 简介 火币为用户提供了一套全新的API,可以帮用户快速接入火币PRO站及HADAX站的交易系统,实现程序化交易. 访问地址 适用站点 适用功能 适用交易对 https://api.h ...