当前位置: 首页 > news >正文

js原型继承

function对象结构(Persion)
    Persion{
        eat:f()
        __proto__:Object{
           constructor:
        }
 }
_proto__ 属性,它是对象所独有的
__proto__属性都是由一个对象指向一个对象,即指向它们的原型对象
它的作用就是当访问一个对象的属性时,如果该对象内部不存在这个属性,
那么就会去它的__proto__属性所指向的那个对象里找,如果父对象也不存在这个属性,
则继续往父对象的__proto__属性所指向的那个对象里找,如果还没找到,
则继续往上找…直到原型链顶端null,此时若还没找到,则返回undefined
prototype属性 它是函数所独有的,它是从一个函数指向一个对象。它的含义是函数的原型对象,
也就是这个函数(其实所有函数都可以作为构造函数)所创建的实例的原型对象
prototype属性 作用就是包含可以由特定类型的所有实例共享的属性和方法,
也就是让该函数所实例化的对象们都可以找到公用的属性和方法。任何函数在创建的时候,
其实会默认同时创建该函数的prototype对象

p.proto === Persion.prototype,它们两个完全一样

总结:
1、我们需要牢记两点:①__proto__和constructor属性是对象所独有的;
  ② prototype属性是函数所独有的,因为函数也是一种对象,所以函数也拥有__proto__和constructor属性。

 2、__proto__属性的作用就是当访问一个对象的属性时,如果该对象内部不存在这个属性,
    那么就会去它的__proto__属性所指向的那个对象(父对象)里找,一直找,直到__proto__属性的终点null,
    然后返回undefined,通过__proto__属性将对象连接起来的这条链路即我们所谓的原型链。

 3、prototype属性的作用就是让该函数所实例化的对象们都可以找到公用的属性和方法,
    即p.__proto__ === Persion.prototype。

 4、constructor属性的含义就是指向该对象的构造函数,所有函数(此时看成对象了)最终的构造函数都指向Function
 代码:
 //function继承
function inherits(Child, Parent) {
    var F = function() { };
    F.prototype = Parent.prototype;
    Child.prototype = new F();//修改子类prototype指向
    //任何一个prototype对象都有一个constructor属性,指向它的构造函数
    //由于修改了child prototype为F则对应的constructor会指向F的prototype的constructor(也就指向了Parent的构造函数了),
    //所以要对应设置一个prototype的contructor
    Child.prototype.constructor = Child;
    Child.super = Parent.prototype;//设置super属性,方便调用父类的prototype方法
}

转载于:https://blog.51cto.com/xuguohongai/2381221

相关文章:

  • DB2jcc 有jdk限制
  • 中小企业如何在网络营销中胜出?
  • 大气环境监测系统,网格化大气环境监测,纵横智控
  • 基于NET Framework使用阿里云AMQP
  • vim的基础操作
  • Apache访问日志记录用户的每一个请求
  • LVS负载均衡机制之LVS-DR模式工作原理以及简单配置
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • axios 或 ajax 请求文件
  • 重磅课程|《CNCF x Alibaba 云原生技术公开课》正式开讲!
  • proxy
  • java String补足
  • Kafka
  • 【嗅探底层】你知道Synchronized作用是同步加锁,可你知道它在JVM中是如何实现的吗?...
  • Android App性能优化技能,看这篇就够了
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • ECMAScript入门(七)--Module语法
  • Mybatis初体验
  • Redis 懒删除(lazy free)简史
  • vue:响应原理
  • 从PHP迁移至Golang - 基础篇
  • 代理模式
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 提醒我喝水chrome插件开发指南
  • 微信支付JSAPI,实测!终极方案
  • 学习Vue.js的五个小例子
  • 2017年360最后一道编程题
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #Lua:Lua调用C++生成的DLL库
  • $$$$GB2312-80区位编码表$$$$
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (C++)八皇后问题
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • ***检测工具之RKHunter AIDE
  • .aanva
  • .form文件_一篇文章学会文件上传
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net CoreRabbitMQ消息存储可靠机制
  • /etc/motd and /etc/issue
  • @FeignClient注解,fallback和fallbackFactory
  • @test注解_Spring 自定义注解你了解过吗?
  • @Valid和@NotNull字段校验使用
  • [ Linux ] Linux信号概述 信号的产生
  • [ 数据结构 - C++] AVL树原理及实现
  • []FET-430SIM508 研究日志 11.3.31
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [AutoSAR 存储] 汽车智能座舱的存储需求