简单理解原型链

  • 什么是原型 ?

我是这样理解的:每一个JavaScript对象在创建的时候就会与之关联另外一个特殊的对象,这个对象就是我们常说的原型对象,每一个对象都会从原型“继承”属性和方法。

  • 什么是原型链 ?

一个由有限个原型对象组成的用来实现继承和共享属性的对象链。

打个通俗的比方,可以把原型链理解成一个家族的血亲关系,每一个后代都会从父代身上继承该家族特有的基因和特征。

  • 什么是"继承" ?

关于原型的继承,我们常说每一个对象都会从原型上"继承"属性,实际上,此"继承"并非意味着简单的复制,而是一个可访问的通道,引用《你不知道的JavaScript》中的一句话:

继承意味着复制操作,然而JavaScript默认并不会复制对象的属性,相反,JavaScript只是在两个对象之间创建一个关联,这样,一个对象就可以通过委托访问另一个对象的属性和函数,所以与其说是继承,委托的说法反而更加准确。

三个概念

prototype

  • 构造函数特有的属性
  • 指向一个原型对象,对象存储了要共享给实例的属性和方法

_proto_

  • 实例对象的一个指针属性
  • 指向上层构造函数对应的prototype,即自己的原型对象

constructor

  • 原型对象的一个属性
  • 指向原型对象的构造函数
  • 通过new创建实例时,对象会继承该属性

对象的原型链

Object

  • 作为对象:Object.__proto__ = Function.prototype
  • 作为函数:Object.prototype是原型链的顶端,Object.prototype.__proto__ = null

Function

  • 作为对象:Function.__proto__ = Function.prototype
  • 作为函数:Function.prototype用于共享,而Function.prototype__proto__继承自Object.prototype

Array

  • 作为对象:Array.__proto__ = Function.prototype
  • 作为函数:Array.prototype用于共享,Array.prototype.__proto__继承自Object.prototype

Person

  • 作为对象:Person.__proto__ = Function.prototype

  • 作为函数:Person.prototype用于共享,Person.prototype.__proto__继承自Object.prototype

    原型链关系:

核心

  1. 原型链顶端是Object.prototype

  2. JavaScript原生对象(Object、Function、Array等)都是Function的实例,它们的__proto__均指向Function.prototype

  3. 除了Object,所有原生对象(构造函数)的prototype,均继承自Object.prototype

  4. JavaScript数据结构

    JavaScript数据结构和原型链之间的关系如下图:

简单理解JavaScript原型链的更多相关文章

  1. 简单粗暴地理解 JavaScript 原型链 (一个充满歪门邪理的理解方法,有助于新手哦!)

    原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧, ...

  2. 好文要顶之 --- 简单粗暴地理解 JavaScript 原型链

    原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧, ...

  3. 简单粗暴地理解 JavaScript 原型链

    尼玛!你特么也是够了! Don’t BB! Show me the code! function Person (name) { this.name = name; } function Mother ...

  4. 再次理解JavaScript原型链和匿名函数

    <!--------------------------------------------- 1.演示匿名加载 2.js单进程执行流 3.原型链理解 a.__proto__:属性每个对象都有 ...

  5. 深入理解javascript原型链

    在javascript中原型和原型链是一个很神奇的东西,对于大多数人也是最难理解的一部分,掌握原型和原型链的本质是javascript进阶的重要一环.今天我分享一下我对javascript原型和原型链 ...

  6. 三张图理解JavaScript原型链

  7. 深入理解javascript原型和闭包(14)——从【自由变量】到【作用域链】

    先解释一下什么是“自由变量”. 在A作用域中使用的变量x,却没有在A作用域中声明(即在其他作用域中声明的),对于A作用域来说,x就是一个自由变量.如下图 如上程序中,在调用fn()函数时,函数体中第6 ...

  8. 简单粗暴地理解js原型链–js面向对象编程

    简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...

  9. 深入理解javascript原型和闭包(15)——闭包

    前面提到的上下文环境和作用域的知识,除了了解这些知识之外,还是理解闭包的基础. 至于“闭包”这个词的概念的文字描述,确实不好解释,我看过很多遍,但是现在还是记不住. 但是你只需要知道应用的两种情况即可 ...

随机推荐

  1. Shell脚本自动重启Java服务

    话不多说直接上代码: cd /home/javaProduct/if [ -d '/home/javaProduct/lib_new/' ]; thenecho 'Has New Lib!'echo ...

  2. Oracle数据库启动报错,找不到数据文件(ORA-01157和ORA-01110)

    数据库报了ORA-01157和ORA-01110错误,提示找不到一个数据文件. 1.启动数据库报错 在启动数据库过程中,报了ORA-01157和ORA-01110错误,提示找不到数据文件. SQL&g ...

  3. python监控rabbitmq的消息队列数量

    [root@localhost chen]# cat b.py #!/usr/bin/python # -*- coding: UTF-8 -*- import json,time import re ...

  4. ubuntu18.04安装docker和开通对外2375端口(方便portainer管理)

    date: 2019-08-03   21:39:37 author: headsen chen apt-get install apt-transport-https ca-certificates ...

  5. pyqt5界面

    用pyqt5做了一个小程序,保留一下这个固定格式: import sys from PyQt5 import uic, QtGui from PyQt5.QtGui import QWindow fr ...

  6. Python设计模式之MVC模式

    # -*- coding: utf-8 -*- # author:baoshan quotes = ('A man is not complete until he is married. Then ...

  7. Python手册 3.7

    Python手册 3.7 下载地址:https://pan.baidu.com/s/1dPzwwP3ehnyLUNWTsB2QJg 关注微信公众号获取提取码: 输入:py99   获取提取码

  8. centos上为新创建的用户(git)指定根目录并生成公钥和私钥

    1.修改用户的根目录 vim /etc/passed 2.su git 3.ssh-keygen -t rsa ssh-keygen -t rsa 4.如图所示,如果要实现无密码访问git仓库,把公钥 ...

  9. 【err】开启Persistence-M模式-Check failed: err == CUBLAS_STATUS_SUCCESS (1 vs. 0) : Create cublas handle failed

    前言 安装好CUDA.CUDNN.NVIDIA driver之后,使用mxnet框架的时候出现该错误,本文记录该问题的解决方法. 环境 ubuntu 16.04 MxNet Cuda9.0 Nvidi ...

  10. 【Leetcode_easy】977. Squares of a Sorted Array

    problem 977. Squares of a Sorted Array solution: class Solution { public: vector<int> sortedSq ...