原型和原型链 及 instanceof函数
一、原型(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函数相关推荐
- 的函数原型_JS基础函数、对象和原型、原型链的关系
JS的原型.原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对 ...
- 原型和原型链和instanceof
一.prototype 在JavaScript中,每个函数都有一个prototype属性,这个属性指向函数的原型对象. function Person(age) {this.age = age } P ...
- 函数高级① -- (函数的prototype、原型、原型链)
文章目录 函数的prototype 显示原型与隐式原型 原型链 构造函数/原型/实例对象的关系 函数的prototype 函数的prototype属性 每个函数都有一个prototype属性, 它默认 ...
- JavaScript高级day02-AM【函数的prototype、显式原型与隐式原型、原型链】
笔记.视频.源码:JavaScript(基础.高级)笔记汇总表[尚硅谷JavaScript全套教程完整版] 目 录 P15 15.尚硅谷_JS高级_函数的prototype 15:04 1. 函数 ...
- JS原型链与instanceof底层原理
转载自 JS原型链与instanceof底层原理 一.问题: instanceof 可以判断一个引用是否属于某构造函数: 另外,还可以在继承关系中用来判断一个实例是否属于它的父类型. 老师说:ins ...
- ES6/02/创建对象,构造函数和原型,原型和原型链,this指向,类,ES5新增的方法,数组方法,回调函数,ES5新增的字符串方法,ES5中新增的对象方法
创建对象 1,利用new Object()创建对象 var obj1 =new Object(); 2,利用对象字面量创建对象 var obj2={}; 3,利用构造函数创建对象 function S ...
- javascript之原型与原型链
前言 了解JavaScript的原型与原型链有助于我们更深层次的理解这门语言,看过很多相关的文章,写的都很好,下面是根据自己的理解,一步步揭开原型与原型链 正文 一.数据类型 在JavaScr ...
- JavaScript原型与原型链(总结篇)
系列文章推荐 JavaScript原型与原型链(基础篇) JavaScript原型与原型链(进阶篇) JavaScript原型与原型链(总结篇) 1 构造函数和实例对象 构造函数的prototype属 ...
- 《JavaScript 闯关记》之原型及原型链
原型链是一种机制,指的是 JavaScript 每个对象都有一个内置的 __proto__ 属性指向创建它的构造函数的 prototype(原型)属性.原型链的作用是为了实现对象的继承,要理解原型链, ...
- java原型链_深入总结Javascript原型及原型链
本篇文章给大家详细分析了javascript原型及原型链的相关知识点以及用法分享,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. 我们创建的每个函数都有一个 prot ...
最新文章
- Matlab编程与数据类型 -- continue、break和return语句
- java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory解决方案
- C中的extern关键字
- 将文件转成byte[]文件属组
- 日期格式化的“疑难杂症”
- 基础才是重中之重~.net中的显式事务与隐式事务
- 【线上直播】:5G时代VR+8K直播 刷新你的视界认知
- 制作IOS 后台极光推送时,遇到的小问题
- 隐藏GridControl的“Drag a column header here to group by that column”
- python根据文件路径获取上级目录路径
- 图纸打印什么时候用蓝图_用CAD打印1:1的图纸,为何测量总是比标注尺寸少那么0.2-0.5mm...
- c# 扩展方法奇思妙用高级篇三:Enumerable.CastT 应用
- 少儿C++编程如何入门
- html 怎么看版本号,怎样查看jquery版本号?
- 物联网和互联网有什么关系
- 当电脑内存比较小的时候,小于4G,安装32bit还是64bit呢
- golang常用库之-pkg/errors包 第三方错误处理包 | golang如何打印错误(error)堆栈
- elementUI 相同元素合并行
- Java 发送QQ邮件
- 安装MikTex并成功编译中文PPT模板详细过程