在js中,每一个对象创建的时候,都会产生一个原型对象,创建出来的对象会从原型对象中继承一些公共的属性和方法。

1,每一个构造函数都有一个prototype属性,这个属性指向构造函数的原型对象。

2,每个由构造函数new创建出的实例对象(除了null)都会有__proto__属性,这个属性可以让实例的对象指向该对象的原型对象。3,每个原型对象都有一个constructor属性,可以指向该原型函数所关联的构造函数。

原型链:当读取构造函数new的实例的属性/方法时,如果找不到,就会自动的去查找该对象关联的原型对象的属性/方法,如果还查找不到,就一直向上查找,找原型对象的原型对象,一直找到最顶层为止。

如上图中,蓝色的线条即为原型链。

原型链继承:了解什么是原型链之后,我们需要知道,原型链是为了实现什么呢,我们接下来就来了解继承,在js中,继承可以通过原型链来实现,原理就是通过修改子构造函数的原型对象,让他去指向父级构造函数new的实例,示例如下(代码仅供参考):

    //父  构造函数function Father(name,age,sex){this.name=name;this.age=age;this.sex=sex;}Father.prototype.money=function(){console.log(this.name+"-----在挣钱");}//子  构造函数function Son(name,age,sex,school){//使用call()立即调用父类方法,并传递参数【继承父类属性】Father.call(this,name,age,sex);//子类  自身属性this.school=school;}//直接将父构造函数的原型对象赋给子构造函数的原型对象// Son.prototype=Father.prototype;//将父 new 构造函数的实例对象赋值给 子 构造函数的原型对象Son.prototype=new Father();//利用constructor 手动改变Son的原型对象的指向的构造函数Son.prototype.constructor=Son;Son.prototype.game=function(){console.log(this.name+"-----在玩游戏");}let f=new Father("a",45,"女");let s=new Son("b",17,"男","清华大学");console.log(f,s);f.money();s.money();s.game();

由上图的代码我们可以看出,我们可以通过constructor属性来修改子构造函数的原型对象,但是我们不能直接把Son的原型对象指向Father的构造函数,这样会造成,两个构造方法共享了所有的方法,而我们要实现的是让Son可以访问Father的方法和属性,而Father是无法使用Son的方法和属性的,所以我们需要一个新的Father构造函数new实例对象来赋值给Son构造函数的原型对象,然后利用constructor属性来手动改变Son的原型对象指向的构造函数,现在我们就成功完成了一个原型链继承,我们可以通过Son的实例对象去调用Son和Father的所有属性和方法,但是Father的实例对象只能调用自身的属性和方法。

js原型和原型链以及原型继承相关推荐

  1. [js高手之路]从原型链开始图解继承到组合继承的产生

    于javascript原型链的层层递进查找规则,以及原型对象(prototype)的共享特性,实现继承是非常简单的事情 一.把父类的实例对象赋给子类的原型对象(prototype),可以实现继承 1 ...

  2. JS 面向对象编程、原型链、原型继承(个人学习总结)

    一.面向对象 1. 面向对象 是所有语言 都有的一种编程思想,组织代码的一种形式 基于对象的语言:JS语言 面向对象的语言:c++ java c# 2. 面向对象 3大特征 封装:将重用代码封装到函数 ...

  3. js中原型,原型链,原型链继承的个人理解

    一.什么是原型? 每一个javascript对象在创建的时候就会有一个与之关联的对象B产生,对象B就是所说的"原型". 1)原型也是一个对象,其他对象可以通过原型实现属性继承, 2 ...

  4. 从零开始学 Web 之 JS 高级(二)原型链,原型的继承

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  5. 你是否理解js的Object与Function与原型链

    js中,Function的本质是什么? Object的本质又是什么? js中有几条原型链? javascript的语言基于原型链,而实际上js的有两条原型链.开发者主要用到的是图中的红色原型链,如给A ...

  6. 浅谈原型链及原型链继承

    1.什么是原型链? JavaScript对象有一个指向一个原型对象的链.当试图访问一个对象的属性是,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个 ...

  7. 原型、原型链、原型链继承 理解

    原型概念: 所有对象都有一个私有的 _proto_ 属性,而这个属性所对应的就是自身的原型: 原型链概念:        所有对像都有一个私有的 _proto_ 属性,而这个属性所指向的就是原型对象, ...

  8. js 四句话搞懂原型和原型链

    一.概念 当试图查找实例对象的某个属性时,不仅仅会在实例类上查找,还会在这个类的父亲爷爷祖爷爷,层层向上,直到查找到第一个名称相同的属性或者到达一个空的原型,这个就是javascript的原型链机制. ...

  9. ES6 (二十二)Class 的继承、extends关键字、super 关键字(函数调用(constructor)、对象(父类原型对象))、原型对象(原型链)、Mixin 模式

    ES6 (二十二)Class 的继承.extends关键字.super 关键字(函数调用(constructor).对象(父类原型对象)).原型对象(原型链).Mixin 模式 文章目录 ES6 (二 ...

最新文章

  1. Hhadoop-2.7.0中HDFS写文件源码分析(二):客户端实现(1)
  2. 【剑指offer-Java版】02实现单例模式
  3. 又发现一个关于R文件丢失的问题
  4. 运维不懂这些面试题拿不到高薪
  5. Delphi处理TWebBrowser的Close事件
  6. 2021-09-211547G - How Many Paths?
  7. HTML5+canvas激流勇进网页游戏源码
  8. LiDAR点云数据处理(TLS/MLS/ALS)
  9. 记腾讯一面 | 掘金技术征文
  10. keil删除工程_RTT 是如何管理和构建工程的?
  11. ext2文件系统源代码之balloc.c文件解析
  12. QQ语音老是连接服务器超时,手机QQ提示连接超时请检查网络设置解决办法
  13. React脚手架安装
  14. 程序员有哪些含金量高的证书可以考?
  15. Markdown合并表格单元格
  16. r语言rank降序_常见排序分析方法及R语言实现
  17. 何炅谢娜刘诗诗杨幂黄晓明 明星最新片酬曝光
  18. ASPICE SWE3之——C代码生成软件详细设计2 注释格式
  19. 登录微信支付商户平台-产品中心,开通企业付款的方法
  20. 人立方 关系搜索 微软发布的人-关系搜索引擎

热门文章

  1. JS 打印函数堆栈信息
  2. js包含字符串判断(js判断字符串包含某个字符串)
  3. (附源码)mysql小程序+spring boot美食教程小程序 毕业设计 190900
  4. WPF 程序鼠标在窗口之外的时候,控件拿到的鼠标位置在哪里?
  5. Facebook 送你个穿搭师,建议十一出行前查收
  6. Postman HTTP 400 Bad Request及模拟@RequestParam请求
  7. 技术培训|RAC 宕机罪犯案情探析之子游标预告
  8. python中数组追加数据_python数组追加
  9. h5使用HbuilderX打包app
  10. hc05与单片机连接图_单片机实例分享,快递追踪器