一、原型(prototype)

  • 定义:一个简单的对象,用于实现对象的属性继承。可以简单理解成对象的爹。在Firefox和Chorme中,每个JS对象中都包含一个__proto__(非标准)的属性指向该对象的原型,可obj.__proto__进行访问
  • 实例是通过构造函数(new)创建出来的对象,实例通过__proto__指向原型,通过constructor指向构造函数
  • 以上描述可表示为:var a = new Object(); a.__proto__ === a.contructor.prototype

二、原型链(prototype chain)

  • 原型链是由原型对象组成,每个对象都有一个__proto__属性,指向了创建该对象的构造函数的原型,__proto__将对象链接起来组成了原型链。是一个用来实现继承和共享属性的有限的对象链。
  • 在 javaScript 中,每个对象都有一个指向它的原型(prototype)对象的内部链接。这个原型对象又有自己的原型,直到某个对象的原型为 null 为止(也就是不再有原型指向),组成这条链的最后一环。这种一级一级的链结构就称为原型链(prototype chain)
function A(){};
var a = new A();
// a  ===> a.__proto__(A.prototype) ===> A.prototype.__proto__(Object.prototype) ===> Object.prototype.__proto__ ===> null

三、instanceof函数

定义:instanceof运算时会递归查找L的原型链,即L.__proto__.__proto__.__proto__.__proto__...直到找到了或者找到顶层为止。一句话理解instanceof的运算规则为:instanceof检测左侧的__proto__原型链上,是否存在右侧的prototype原型。
有一个有趣的现象:

Function instanceof Object; // true
Object instanceof Function; // true

为何Object instanceof Function为true?

  • Object, Function, Array等等这些都被称作是构造“函数”(想一下我们可以var a = new Object()来创建一个对象,所以Object本身就是一个构造函数),他们都是函数。而所有的函数都是构造函数Function的实例。
  • 从原型链机制的的角度来说,即Function.prototype在Object的原型链上。Function这个内置函数的Function.prototype是一个函数a,因为函数同时也是对象,因此这个函数a也定义了apply、call、bind等属性(或者说方法)。而Object的委托目标Object.__proto__正是这个函数a,代码表示为:Function.prototype === Object.__proto__ // true

原型和原型链 及 instanceof函数相关推荐

  1. 的函数原型_JS基础函数、对象和原型、原型链的关系

    JS的原型.原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对 ...

  2. 原型和原型链和instanceof

    一.prototype 在JavaScript中,每个函数都有一个prototype属性,这个属性指向函数的原型对象. function Person(age) {this.age = age } P ...

  3. 函数高级① -- (函数的prototype、原型、原型链)

    文章目录 函数的prototype 显示原型与隐式原型 原型链 构造函数/原型/实例对象的关系 函数的prototype 函数的prototype属性 每个函数都有一个prototype属性, 它默认 ...

  4. JavaScript高级day02-AM【函数的prototype、显式原型与隐式原型、原型链】

    笔记.视频.源码:JavaScript(基础.高级)笔记汇总表[尚硅谷JavaScript全套教程完整版] 目   录 P15 15.尚硅谷_JS高级_函数的prototype 15:04 1. 函数 ...

  5. JS原型链与instanceof底层原理

    转载自  JS原型链与instanceof底层原理 一.问题: instanceof 可以判断一个引用是否属于某构造函数: 另外,还可以在继承关系中用来判断一个实例是否属于它的父类型. 老师说:ins ...

  6. ES6/02/创建对象,构造函数和原型,原型和原型链,this指向,类,ES5新增的方法,数组方法,回调函数,ES5新增的字符串方法,ES5中新增的对象方法

    创建对象 1,利用new Object()创建对象 var obj1 =new Object(); 2,利用对象字面量创建对象 var obj2={}; 3,利用构造函数创建对象 function S ...

  7. javascript之原型与原型链

    前言   了解JavaScript的原型与原型链有助于我们更深层次的理解这门语言,看过很多相关的文章,写的都很好,下面是根据自己的理解,一步步揭开原型与原型链 正文 一.数据类型   在JavaScr ...

  8. JavaScript原型与原型链(总结篇)

    系列文章推荐 JavaScript原型与原型链(基础篇) JavaScript原型与原型链(进阶篇) JavaScript原型与原型链(总结篇) 1 构造函数和实例对象 构造函数的prototype属 ...

  9. 《JavaScript 闯关记》之原型及原型链

    原型链是一种机制,指的是 JavaScript 每个对象都有一个内置的 __proto__ 属性指向创建它的构造函数的 prototype(原型)属性.原型链的作用是为了实现对象的继承,要理解原型链, ...

  10. java原型链_深入总结Javascript原型及原型链

    本篇文章给大家详细分析了javascript原型及原型链的相关知识点以及用法分享,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. 我们创建的每个函数都有一个 prot ...

最新文章

  1. Matlab编程与数据类型 -- continue、break和return语句
  2. java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory解决方案
  3. C中的extern关键字
  4. 将文件转成byte[]文件属组
  5. 日期格式化的“疑难杂症”
  6. 基础才是重中之重~.net中的显式事务与隐式事务
  7. 【线上直播】:5G时代VR+8K直播 刷新你的视界认知
  8. 制作IOS 后台极光推送时,遇到的小问题
  9. 隐藏GridControl的“Drag a column header here to group by that column”
  10. python根据文件路径获取上级目录路径
  11. 图纸打印什么时候用蓝图_用CAD打印1:1的图纸,为何测量总是比标注尺寸少那么0.2-0.5mm...
  12. c# 扩展方法奇思妙用高级篇三:Enumerable.CastT 应用
  13. 少儿C++编程如何入门
  14. html 怎么看版本号,怎样查看jquery版本号?
  15. 物联网和互联网有什么关系
  16. 当电脑内存比较小的时候,小于4G,安装32bit还是64bit呢
  17. golang常用库之-pkg/errors包 第三方错误处理包 | golang如何打印错误(error)堆栈
  18. elementUI 相同元素合并行
  19. Java 发送QQ邮件
  20. 安装MikTex并成功编译中文PPT模板详细过程

热门文章

  1. mysql表结构及索引脚本
  2. JavaScript之节点的创建、替换、删除、插入
  3. 《Python学习手册》(三)
  4. 大学四年计算机也许应该这样学。。。
  5. 《精通Spring4.X企业应用开发实战》读后感第六章(国际化)
  6. Asterisk的配置详解
  7. 面向对象基础(继承类,抽象方法,接口,委托和事件)
  8. 无法远程连接SQLSERVER2000的解决方法
  9. VC++2012编程演练数据结构《14》链式堆栈
  10. Safari、IE8、iPhone和BlackBerry在Pwn2Own竞赛中被挑落