JS原型与原型链总结:

一、专有名词总结

构造函数:

区别:构造函数与其他函数的区别,会new实例化对象,每一个构造函数都有一个原型对象,还有一个原型属性prototype

function Female(name){this.name = name;this.sex = 'female';  }

原型对象:Female就是原型对象

实例化对象:var person1=new Female()     =>person1就是实例化对象

构造函数Female就是实例对象person1的原型!!!Female里的this关键字就指的是person1这个对象!

原型链:

二、原型与原型链

1、原型

原型的概念:每一个javascript对象(除null外)创建的时候,就会与之关联另一个对象,这个对象就是我们所说的原型,每一个对象都会从原型中“继承”属性。

  • javascript语言是一种面向对象的语言,它没有"子类"和"父类"的概念,里面所有的数据类型都是对象,如何将这些对象联系起来呢?
  • 构造函数是什么?构造函数与其他函数唯一的区别在于调用方式不同。任何函数只要通过new来调用就可以作为构造函数,它是用来创建特定类型的对象。

  • 所以实例对象的属性和方法一般分为两种:一种是自身的,一种是引用自prototype的。

  • 为什么在原型对象上挂属性prototype=>若多个实例调用同一个属性或方法                                                                (希望构造函数中的某个属性是一个共有属性,那么此时用这样的方法,每个实例中都有一个相同的属性,会造成资源极大的浪费)

  • 每当代码读取某个对象的某个属性的时候,都会执行一次搜索。首先从对象实例本身开始,如果在实例中找到了该属性,则返回该属性的值,如果没有找到,则顺着原型链指针向上,到原型对象中去找,如果如果找到就返回该属性值。

    这里要提一点,如果为对象实例添加了一个属性与原型中同名,则该属性会屏蔽掉原型中的同名属性,不会去修改它!使用delete可以删除实例中的属性~(提到delete那要插一句~delete只能删除对象下的属性,不能删除变量和参数!)

2、原型链

一个对象的__proto__指向着他的构造函数的prototype

function Person(name, sex) {this.name = namethis.sex = sex}
var p1=new Person()

eg:   Person.prototype=p1._proto_

(这个构造函数的__proto__又指向着再上一级的公共区域,而最上级的公共区域实际上也有__proto__,不过可想而知,既然已经是最上级的公共区域,指向的就是null了。)

总结:
实例对象的原型链:
p1._proto_ -> 构造函数.prototype -> Object.prototype -> null

函数的原型链:

函数 -> Function.prototype -> Object.prototype -> null

(由于函数是Function这个构造函数构造出来的,所以函数.__proto__指向的是Function.prototype,再往上?因为Function.prototype也是一个对象,是由Object这个构造函数构造出来的,也就是说Function.prototype.__proto__ === Object.prototype)

1、在JavaScript中,每个函数都有一个prototype属性,这个属性指向函数的原型对象。

2、每个原型都有一个constructor属性,指向该关联的构造函数。

3、这是每个对象(除null外)都会有的属性,叫做__proto__,这个属性会指向该对象的原型。(形成原型链)

知乎(完美总结原型与原型链关系):https://zhuanlan.zhihu.com/p/161370971

JS原型与原型链总结相关推荐

  1. 浅谈JS原型与原型链(一)

    最近学习JavaScript原型与原型链的时候,被这块知识烧得脑壳疼,prototype与__proto__混淆不清.网上各种图解,都画的好复杂,绕老绕去,不明所以,看得越来越糊涂.还是亲自动手敲敲, ...

  2. JS原型与原型链终极详解

     一. 普通对象与函数对象   JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象.下面举例说明 functi ...

  3. JS题目总结:原型链/new/json/MVC/Promise

    JS题目总结:原型链/new/json/MVC/Promise 1原型链相关 解读: 上图中,Object,Function,Array,Boolean都是构造函数 第一个框: object是实例对象 ...

  4. js原型和原型链_重学js --原型与原型链

    一.什么是原型: .每个对象都有一个__proto__属性,并且指向它的prototype原型对象 每个构造函数都有一个prototype原型对象 prototype原型对象里的constructor ...

  5. JS难点剖析-原型原型链

    2019独角兽企业重金招聘Python工程师标准>>> js的原型&原型链&闭包,在很多人看来是区分JS程序员水平的关键知识点,当然对这句话我不是十分赞同.但是掌握这 ...

  6. js原型和原型链_JS里的原型和原型链

    JS里的原型与原型链 原型 原型和原型链的目的是解决构造函数生成的对象内共同属性重复生成的问题,使其更高效.在下面这个例子里每次生成一个实例对象都要生成一个mmm方法,没有必要,完全可以共享. 构造函 ...

  7. (五)JS基础知识二(通过图理解原型和原型链)【三座大山之一,必考!!!】

    JS基础知识二(原型和原型链) 提问 class 继承 类型判断(instanceof) 原型 原型关系 基于原型的执行规则 原型链 说明 提问 如何准确判断一个变量是不是数组 class的原型本质 ...

  8. 最详细的讲解 JS 原型与原型链

    文章目录 一. 普通对象与函数对象 二. 构造函数 三. 原型对象 四. proto 五. 构造器 六. 原型链 七. Prototype 总结 一. 普通对象与函数对象 JavaScript 中,万 ...

  9. js原型、原型链、作用链、闭包全解

    https://www.2cto.com/kf/201711/698876.html [对象.变量] 一个对象就是一个类,可以理解为一个物体的标准化定义.它不是一个具体的实物,只是一个标准.而通过对象 ...

  10. [js] js怎样避免原型链上的对象共享?

    [js] js怎样避免原型链上的对象共享? 组合继承 优势 公有的写在原型 私有的卸载构造函数 可以向父类传递参数 劣势 需要手动绑定constructor 封装性一般 重复调用父类性能损耗

最新文章

  1. c++ string 拼接_String类5个常见面试题的解答过程和原理
  2. 前端技术学习路线及技术汇总
  3. rpgmaker mv修改_吴青峰版一点点MV 释出,唱作女帝陈珊妮执导
  4. linux bash command not found
  5. 1034 Head of a Gang (30 分) 【难度: 中 / 知识点: 并查集】
  6. python 逐行读取csv_在R中如何逐行读取CSV文件并将内容识别为正确的数据类型?...
  7. 【Matlab】模式识别——聚类算法集锦
  8. c语言2的1000次方,在网上看到一个求2的10000次方的方法,有个地方看不懂,求大佬...
  9. MyEclipse开启Jquery智能提示
  10. 微信小程序官方demo下载地址
  11. 【bat】bat批处理文件的注释
  12. Markdown绘制思维导图
  13. 贱人工具箱使用技巧6——制作表格和表格居中
  14. 花生壳内网发布外网可以访问的网站
  15. 邮件服务器SASL TLS 反垃圾邮件系统
  16. P5960 【模板】差分约束算法 · spfa
  17. Effective C++ 条款13 以对象管理资源
  18. 辉芒微IO单片机FT60F12F-MRB
  19. python中秋月饼
  20. AT89S52与AT89c51的区别

热门文章

  1. windows图片和传真查看器
  2. 利用PaddleDetection 训练自定义VOC数据集进行目标检测
  3. 关于Bootstrap 中使用Tooltips不生效的问题
  4. [4G5G专题-23]:架构-5G无线接入内部网元架构与空口协议功能切分
  5. 基于android的酒店客房预订客户端app
  6. BCH分叉影响深远 业内外热议不断
  7. 在任意位置Reset掉任意的TCP连接
  8. 第3章【思考与练习4】数据清洗,从studentsInfo.xlsx 文件的“Group1”表单中读取数据。数据填充,使用习题1的数据,使用列的平均值填充“体重”和“成绩”列的NaN数据。
  9. vue下载二进制流图片
  10. java http 传输二进制流_字符流、字节流、二进制及其在HTTP协议传输