深入理解JS原型与原型链
函数的prototype
1.函数的prototype属性
*每个函数都有一个prototype属性,它默认指向一个Object空对象(即称为原型对 象)
* 原型对象中都有一个属性constructor,它指向函数对象。
2.给原型对象添加属性(一般是方法)
* 作用: 函数的所有实例对象自动拥有原型中的属性(方法)
显式原型与隐式原型
1. 每个函数function都有一个prototype,即显式原型(属性)
2. 每个实例对象都有一个__proto__,可称为隐式原型(属性)
3. 对象隐式原型的值为其对应构造函数的显式原型的值

4.内存结构图

5.总结:
* 函数的prototype属性:在定义函数时自动添加,默认值是一个空Object对象
* 对象的__proto__属性: 创建对象时自动添加的,默认值为构造函数的prototype属性值
* 程序员能直接操作显示原型,但不能直接操作隐式原型(ES6之前)
原型链
* 访问一个对象的属性时,
* 先在自身属性中查找,找到返回
* 如果没有,再沿着__proto__这条链向上查找,找到返回
* 如果最终没找到,返回undefined
* 别名:隐式原型链
* 作用:查找对象的属性(方法) ps:查找变量的属性用 作用域链
1.原型链(图解)

2.构造函数/原型/实体对象的关系(图解)

function Foo(){ }的本质是 var Foo = new Function()
而 Function = new Funtion()
(只有这样 它自身的显式原型和隐式原型才是相等的 别的函数没有这个特点)
实例对象的隐式原型属性=构造函数的显式原型属性
所有函数的隐式原型__proto__都应该相等。都等于Function.prototype
* 因为所有函数都是new Function() 产生的。
3.构造函数/原型/实体对象的关系2(图解)

原型链补充
1. 函数的显式原型指向的对象默认是空Object实例对象(但Object不满足)

2.所有函数都是Function的实例(包含Funtion)

原型链 属性问题
1.(隐式)原型链是(对象)用来查找属性值的
*读取对象的属性时:会自动到原型链中查找
2.设置对象的属性值时,不会查找原型链,直接添加此属性并设置值。
3.方法一般定义在原型中,属性一般通过构造函数定义在对象身上。
深入理解JS原型与原型链的更多相关文章
- 理解js中的原型链
对象有”prototype”属性,函数对象有”prototype”属性,原型对象有”constructor”属性. 关于原型 在JavaScript中,原型也是一个对象,通过原型可以实现对象的属性继承 ...
- 理解js中的原型,原型对象,原型链
目录 理解原型 理解原型对象 实例属性与原型属性的关系 更简单的原型语法 原型的动态性 原型链 理解原型 我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象, ...
- 深入理解JS对象和原型链
函数在整个js中是最复杂也是最重要的知识 一个函数中存在多面性: 1.它本身就是一个普通的函数,执行的时候形成的私有作用域(闭包),形参赋值,预解释,代码执行,执行完 成后栈内存销毁/不销毁. 2.& ...
- 理解js中的原型链,prototype与__proto__的关系
说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type="text/javascript"> 2 var Pers ...
- 【转】理解js中的原型链,prototype与__proto__的关系
说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type="text/javascript"> 2 var Pers ...
- [转]理解js中的原型链,prototype与__proto__的关系
本文转自:http://rockyuse.iteye.com/blog/1426510 说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script typ ...
- 理解js的prototype原型对象
我们创建的每一个函数都有一个prototype(原型)属性.这个属性是一个指针,指向一个对象,而这个对象的用途是包括能够由特定类型的全部实例共享的属性和方法.假设依照字面意思来理解,那么prototy ...
- 深入理解js——隐式原型
每个函数都有一个prototye(原型),而每个对象都有一个_proto_,可成为隐式原型. _proto_是一个隐藏的属性,javascript不希望开发者用到这个属性值,有的低版本浏览器甚至不支持 ...
- 深入理解js——自由变量和作用域链
自由变量:在A作用域中使用变量X,却没有在A作用域中声明(在其他作用域中声明),对于A作用域来说X就是一个自由变量. var x=10; function fn(){ var b=20; consol ...
- JS基础-该如何理解原型、原型链?
JS的原型.原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对 ...
随机推荐
- Java容器的常见问题
记录Java容器中的常见概念和原理 参考: https://github.com/wangzhiwubigdata/God-Of-BigData#三Java并发容器 https://blog.csdn ...
- C# 基础知识系列- 3 集合数组
简单的介绍一下集合,通俗来讲就是用来保管多个数据的方案.比如说我们是一个公司的仓库管理,公司有一堆货物需要管理,有同类的,有不同类的,总而言之就是很多.很乱.我们对照集合的概念对仓库进行管理的话,那么 ...
- MySql最左匹配原则解析
看前提问:table中有多个字段组成的联合索引(a,b,c),查询时哪些情况能够命中索引呢? 话不多说,直接开搞: 数据库表结构如下: CREATE TABLE `test` ( `id` ) uns ...
- 使用条件随机场模型解决文本分类问题(附Python代码)
对深度学习感兴趣,热爱Tensorflow的小伙伴,欢迎关注我们的网站!http://www.tensorflownews.com.我们的公众号:磐创AI. 一. 介绍 世界上每天都在生成数量惊人的文 ...
- 面试刷题29:mysql事务隔离实现原理?
mysql的事务是innodb存储引擎独有的,myisam存储引擎不支持事务. 事务最经典的例子就是转账了,事务要保证的是一组数据库的操作要么全部成功,要么全部失败.是为了保证高并发场景下数据的正确性 ...
- SpringCloud-Nacos/OpenFien/Gateway的基本介绍及快速上手
一.Spring-Cloud-Alibaba-Nacos 注册中心 1.下载.安装 Nacos 下载地址:https://github.com/alibaba/nacos/releases 下载后解压 ...
- 利用sqlmap进行Access和Mysql注入
sqlmap将检测结果保存到C:\Users\Administrator.sqlmap\output (windows) linux:(/root/.sqlmap/output) Access注入 1 ...
- [noip模拟]数字对<RMQ&二分>
数字对 [题目描述] 小H是个善于思考的学生,现在她又在思考一个有关序列的问题. 她的面前浮现出一个长度为n的序列{ai},她想找出一段区间[L, R](1 <= L <= R <= ...
- Ubuntu 18 安装MySQL 5.7
1.首先把系统换到阿里云的镜像源,需要等待一会 2.系统更新完毕后执行MySQL安装命令:sudo apt install mysql-server 3.查看MySQL服务状态:sudo servic ...
- M_map(五)
一.圆形区域的画图 1. clear all LATLIMS=[14 22]; LONLIMS=[108 118];%南海边界范围 m_proj('miller','lon',LONLIMS,'lat ...