首页 > 其他分享 >web前端tips:js继承——原型链继承

web前端tips:js继承——原型链继承

时间:2023-07-25 17:34:28浏览次数:39  
标签:web 继承 子类 js 原型 Child 父类 构造函数

输入图片描述

原型链继承

原型链继承是 JavaScript 中实现继承的一种方式,它通过使用原型来实现对象之间的继承关系。

在 JavaScript 中,每个对象都有一个原型(prototype),它是一个指向另一个对象的引用。当我们访问一个对象的属性时,如果该对象自身没有该属性,则会去它的原型上查找,如果原型上也没有,则会继续往上层原型查找,直到找到该属性或者到达原型链的顶端。

原型链继承就是利用这种原型链的特性来实现继承。具体步骤如下:

  1. 创建一个父类的构造函数,并定义父类的属性和方法。
  2. 创建一个子类的构造函数,并将其原型对象指向父类的实例。
  3. 在子类的构造函数中添加子类独有的属性和方法。
// 1
function Parent() {
  this.arr = [1,2,3]
}
Parent.prototype.getArr = function() {
  return this.arr
}

// 2
function Child() {
  this.name = 'Child'
}
Child.prototype = new Parent()

// 3
Child.prototype.getName = function() {
  return this.name
}

// 实例化
var child = new Child()
child.getName() // 'Child'
child.getArr() // [1,2,3]

通过以上步骤,我们就实现了子类继承父类的属性和方法,并且可以在子类中添加自己独有的属性和方法。这样,当我们创建子类的实例时,它会先在自身查找属性和方法,如果没有找到,则会去父类的原型上查找,从而实现了继承。

优点

原型链继承方式的优点在于 简单

缺点

使用原型链继承的一个缺点是,所有子类的实例都共享同一个父类的实例,这可能会导致子类实例之间相互影响。

child.arr.push(4)
child.getArr() // [1,2,3,4]

var child2 = new Child()
child2.gerArr() // [1,2,3,4],想要的结果应该是[1,2,3]

另外,如果子类需要传递参数给父类的构造函数,就无法通过直接调用父类的构造函数来实现,需要通过中间的过程来传递参数。

结语

牵手 持续为你分享各类知识和软件 ,欢迎访问、关注、讨论 并留下你的小心心❤

标签:web,继承,子类,js,原型,Child,父类,构造函数
From: https://blog.51cto.com/u_15994752/6847428

相关文章

  • var js_usergroup_name python
    如何实现“varjs_usergroup_namepython”作为一名经验丰富的开发者,我很乐意教会刚入行的小白如何实现“varjs_usergroup_namepython”。在这篇文章中,我将为你展示整个实现过程,并提供每个步骤所需的代码和相应的注释。让我们开始吧!实现流程为了更好地理解整个实现过程,我将使......
  • 浏览器web原生播放 rtmp,rtsp(h264, h265),flv, hls 的解决方案
    一、liveweb简述liveweb是一款超低延时(150-200毫秒)、秒启动、无插件web实时视频播放器,h5视频播放器,支持egde、firefox、Chrome、safari等常见浏览器。支持h264、h265、AAC、G711等常见音视频格式。支持协议:RTSP、RTMP、HLS、HTTP-FLV、WebSocket-FLV、GB28181、HTTP-TS、WebSocke......
  • Web 3.0 会是互联网的下一个时代吗?
    2000年初,只读互联网Web1.0被Web2.0所取代。在Web2.0时代,用户摆脱了只读的困扰,可以在平台上进行互动并创作内容。而Web3.0的到来,除了加密货币和区块链等相关名词让大家耳熟能详外,并没有让广大互联网用户真正意义上地感知到。那么到底什么是Web3.0呢?什么是Web3.0......
  • 记录使用HPSocket.NET包开发WebSocket通讯,报错Could not decode a text frame as UTF-
    因工作需要开发Scada系统,使用到WebSocket通讯,网页客户端接收数据时发生CouldnotdecodeatextframeasUTF-8报错 通过网络检索,有多种说法,验证如下1、文本针和二进制针的数据发送方式都测试失败1stringkson=JsonConvert.Serialize......
  • WEB漏洞—逻辑越权之水平垂直越权
    逻辑越权简介1.水平越权---通过更换的某个ID之类的身份标识,从而使A账号获取(修改、删除等)B/C/D账号数据(权限相同)。2.垂直越权---使用低权限身份的账号,发送高权限账号才能有的请求,获得其高权限的操作。3.未授权访问---通过删除请求中的认证信息后重放该请求,依旧可以访问......
  • JS中的浏览器对象模型-DOM(一)
    document对象中,document元素的选取、修改、添加、删除是常见的应用。元素的选取下面一段HTML代码,我们可以非常方便地选取指定的元素。例如:<!--HTML结构--><divid="test-div"><divclass="c-red"><pid="test-p">JavaScript</p>......
  • ABP VNext添加全局认证(如何继承AuthorizeFilter)
    前言目前公司采用的开发框架是ABPVNext微服务框架最近突然发现一个问题,ABP中如果控制器或服务层没有加 Authorize特性的话,则不会走身份认证,且不会认证Token如图: 但是项目已开发大半,一个个去补Authorize特性,工作量比较大,也容易产生遗漏就想着以前做单体应用的时候......
  • 纯手撸 Django web框架批量删除redis的key
    纯手撸Djangoweb框架批量删除redis的key环境环境参照上一章节博客部署环境,在此基础上进行功能加强【批量删除指定前缀的key】,然后再CI里面掉这个接口地址即可清理redis缓存的key,更加高效的运维工作修改视图##mysite/myweb1/views.py#Createyourviewshere.fromdj......
  • json 包 转字符串为dict json.loads(data_str)
    importjson##假设有一个JSON对象#data={#"name":"John",#"age":30,#"city":"NewYork"#}###将JSON对象转换为字符串#json_str=json.dumps(data)##print(json_str)#str转json类型是字典data_......
  • 大json传输优化方法
    1.http流式传输数据压缩gzip、deflate、br分块传输Transfer-Encoding:chunked范围请求Range:bytes=0-100多段数据multipart/byteranges分隔标记boundary类似于文件上传下载2.json特有压缩算法     参考:基于HTTP流式传输的长时响应体验提升    ......