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

js继承—15

继承

会员系统

视频网站有两种会员:

  • 普通会员
    • 属性:用户名、密码
    • 方法:观看免费视频
  • VIP会员
    • 属性:普通会员的所有属性、会员到期时间
    • 方法:普通会员的所有方法、观看付费视频

如果我们需要使用构造函数来创建会员,如何书写构造函数才能实现上面的需求?

// 普通会员的构造函数
function User(username, password){this.username = username;this.password = password;
}
User.prototype.playFreeVideo = function(){console.log('观看免费视频')
}// VIP会员的构造函数
function VIPUser(username, password, expires){this.username = username;this.password = password;this.expires = expires;
}
VIPUser.prototype.playFreeVideo = function(){console.log('观看免费视频')
}
VIPUser.prototype.playPayVideo = function(){console.log('观看付费视频')
}

上面的代码出现了两处重复代码:

  1. VIPUser的构造函数中包含重复代码

    this.username = username;
    this.password = password;
    

    这段代码和User构造函数并没有区别,可以想象得到,将来也不会有区别,即:普通用户该有的属性,VIP用户一定有

  2. VIPUser的原型上包含了重复代码

    VIPUser.prototype.playFreeVideo = function(){console.log('观看免费视频')
    }
    

    这个方法和User上的同名方法逻辑完全一致,可以想象得到,将来也不会有区别,即:普通用户该有的方法,VIP用户一定有

如何解决上述两处重复?

处理构造器内部的重复

可以将VIPUser构造器改写为

function VIPUser(username, password, expires){User.call(this, username, password);this.expires = expires;
}

处理原型上的重复

只需要将原型链设置为下面的结构即可

在这里插入图片描述

仅需一句代码即可

Object.setPrototypeOf(VIPUser.prototype, User.prototype)

至此,完美的解决了之前提到的两处重复代码的问题

这和继承有什么关系

继承是面向对象的概念,它描述了两个对象类型(类,构造函数)之间的关系

如果在逻辑上可以描述为:A不一定是B,但B一定是A,则:B继承A、A派生B、A是B的父类、B是A的子类

子类的实例应该自动拥有父类的所有成员

继承具有两个特性:

  • 单根性:子类最多只有一个父类
  • 传递性:间接父类的成员会传递到子类中

如何在JS中封装继承

function inherit(Child, Parent){// 在原型链上完成继承 Object.setPrototypeOf(Child.prototype, Parent.prototype);
}

过去,由于没有提供更改隐式原型的方法,因此这一过程会比较复杂。那时候,我们使用一种称之为「圣杯模式」的办法来达到相同的目的,这里不做介绍。

http://www.dtcms.com/a/416182.html

相关文章:

  • 做网站哪家服务器好免费发广告的网站
  • 企业网站优化软件南通网站建设价格
  • 做营销型网站一般要多少钱ios移动网站开发详解 pdf
  • 使用Scade One建模N阶FIR滤波器
  • wordpress回收站在哪里免费的网络推广渠道
  • 基于深度学习模型融合的工业零部件工艺缺陷检测算法有哪些?
  • I2C设备通信失败,逻辑分析仪采集不到信号,或者从机无应答
  • 投资20万做网站好吗网络营销收获与体会
  • 虹口专业网站建设网站备案在外地
  • 栈和队列的算法题
  • 记录一次面经八股学习
  • 盐山县网站建设价格涪城移动网站建设
  • 成都专业做网站的公司做网站类型
  • .net做的网站代码如何做门户网站
  • AI 系统常见攻击类型及核心原理解析
  • 怀化网站优化哪里有wordpress百度xml
  • 17网站一起做网店潮汕做的最好的快餐网站
  • 建立自己的网站视频网站的建设
  • 请人做网站卖东西好吗wordpress分页美化
  • 提高前端开发效率的利器:VUE常用组件及应用
  • 保定建设环境项目网站帝国cms官方网站
  • 公司建设网站记什么费用免费自助建设网站
  • 网站建设有没有资质点击图片进入网站怎么做
  • 重庆网站建设 夹夹虫专业做影评的网站
  • Java-新特性-Record(记录)(jdk>=14)
  • Cookie与Session
  • 机器视觉:基于 Python 的人脸识别与照片管理工具——从检测到整理的全流程实现
  • 网站开发速成网络平台推广引流
  • 房地产网站建设存在问题江阴市建设局网站
  • 广州市建设工程安监站网站怎样把一个网站建设的更好