位置: IT常识 - 正文

js实现继承属性和方法(js实现继承属性功能)

编辑:rootadmin
js实现继承属性和方法 js实现继承属性和方法1 使用extends实现继承2 原型链继承3 组合继承4 寄生组合继承5 实例继承6 拷贝继承7 扩展7.1 函数中方法定义在函数内部、函数外、prototype上的区别7.2 class创建实例与构造函数创建实例

推荐整理分享js实现继承属性和方法(js实现继承属性功能),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js继承几种方式,js实现继承属性功能,js继承的三种方法,js继承如何实现,js 继承实现,js继承的三种方法,js继承的三种方法,js继承几种方式,内容如对您有帮助,希望把文章链接给更多的朋友!

首先定义一个父类

function Animal (name, age) { this.name = name this.age = age this.eat = function () { console.log('吃', this.name, this.age) }}Animal.prototype.drink = function () { console.log('喝', this.name, this.age)}// 实验一下const test = new Animal('狗', 3)test.eat()test.drink()console.log(test)

运行结果

1 使用extends实现继承

最简便的继承方式,仅支持ES6+

class Dog extends Animal { constructor(name, age, breed) { super(name, age) this.breed = breed } cry () { console.log('叫', this.name, this.age, this.breed) }}// 实验一下 const dog = new Dog('狗', 3, '田园犬'); dog.eat() dog.drink() dog.cry() console.log(dog)

实验结果

2 原型链继承function Dog (name, age, breed) { Animal.call(this, name, age); this.breed = breed; this.cry = function () { console.log('叫', this.name, this.age, this.breed) }}Dog.prototype = new Animal()Dog.prototype.constructor = Dog// 实验一下const dog = new Dog('狗', 3, '田园犬');console.log(dog)dog.eat()dog.drink()dog.cry()js实现继承属性和方法(js实现继承属性功能)

实验结果

3 组合继承function Dog (name, age, breed) { Animal.call(this, name, age); this.breed = breed; this.cry = function () { console.log('叫', this.name, this.age, this.breed) }}Dog.prototype = Object.create(Animal.prototype)Dog.prototype.constructor = Dog// 实验一下const dog = new Dog('狗', 3, '田园犬');console.log(dog)dog.eat()dog.drink()dog.cry()

实验结果

4 寄生组合继承function Dog (name, age, breed) { Animal.call(this, name, age); this.breed = breed; this.cry = function () { console.log('叫', this.name, this.age, this.breed) }}(() => { let Super = function () { }; Super.prototype = Animal.prototype; Dog.prototype = new Super(); Dog.prototype.constructor = Dog;})();// 实验一下const dog = new Dog('狗', 3, '田园犬');console.log(dog)dog.eat()dog.drink()dog.cry()

实验结果

5 实例继承function Dog (name, age, breed) { let dog = new Animal(name, age); dog.breed = breed; dog.cry = function () { console.log('叫', this.name, this.age, this.breed) } return dog}// 实验一下const dog = new Dog('狗', 3, '田园犬');console.log(dog)dog.eat()dog.drink()dog.cry()

实验结果

6 拷贝继承function Dog (name, age, breed) { let animal = new Animal(name, age); for (let key in animal) { this[key] = animal[key] } this.breed = breed; this.cry = function () { console.log('叫', this.name, this.age, this.breed) }}// 实验一下const dog = new Dog('狗', 3, '田园犬');console.log(dog)dog.eat()dog.drink()dog.cry()

实验结果

7 扩展7.1 函数中方法定义在函数内部、函数外、prototype上的区别挂载在函数内部的方法,实例内部会复制构造函数的方法挂载在原型上的方法,不会去复制。挂载在内部和原型上的方法都是可以通过实例去调用的一般来说,如果需要访问构造函数内部的私有变量,我们可以定义在函数内部,其他情况我们可以定义在函数的原型上在函数外定义的方法,只能用类调用函数位置调用方式结果构造函数内函数名直接调用报错函数外函数名直接调用正常执行函数外 prototype上函数名直接调用报错构造函数内实例化对象调用正常执行函数外实例化对象调用报错函数外 prototype上实例化对象调用正常执行7.2 class创建实例与构造函数创建实例function exa1 (name, age) { this.name = name this.age = age this.innerFunc = function () { console.log('inner') } } exa1.prototype.outerFunc = function () { console.log('prototype') } exa1.getClassName = function () { console.log('example') } class exa2 { constructor(name, age) { this.name = name this.age = age } innerFunc = function () { console.log('inner') } outerFunc () { console.log('prototype') } static getClassName () { console.log('example') } } console.log(new exa1(), new exa2())

本文链接地址:https://www.jiuchutong.com/zhishi/299660.html 转载请保留说明!

上一篇:前端实战|React18项目启动——pc端极客园项目前置准备(前端实战培训)

下一篇:ChatGPT加强版GPT-4面世,打工人的方式将被颠覆(gpt3 plug)

  • 纳税申报的基本内容有哪些
  • 每年税务师考试几次
  • 电信没有基站为什么信号也很好
  • 再保险业务赔款如何进行税前扣除
  • 现金折扣税务筹划
  • 资产重组过程中资产转出的税收问题
  • 民非企业购买低保政策
  • 什么发票可以用来抵税
  • 协方差cov计算公式展开
  • 商贸公司开办费用
  • 咨询者对咨询师产生移情
  • 技术先进型企业认定
  • 销售方如何开具红字增值税专票 对方未抵扣
  • 土地出让金缴纳契税计税依据
  • 机动车销售统一专票税率
  • 鸿蒙系统控制中心
  • 用户登录系统后首先进入什么
  • 单位开具发票
  • 凤尾蕨的养殖方法
  • 完税证明和纳税申报表是一种东西吗
  • php面向对象的三大特征
  • 台湾中原大学相当于大陆几本
  • linux系统怎么打开
  • php ftp上传文件
  • php生成zip压缩包
  • 公司报销客户的差旅费
  • 生产成本分配表模板
  • 二手设备账务处理
  • 前端使用vue
  • php 文件系统
  • 运动目标检测算法
  • centos-6.5-i386-bin-dvd1.iso
  • html转化成图片
  • 【第十一届“泰迪杯”数据挖掘挑战赛】B题产品订单的数据分析与需求预测“解题思路“”以及“代码分享”
  • react组件调用方法
  • 小规模纳税人可以开专票吗
  • 小型微利企业税收
  • 公司注销剩余的发票怎么作废
  • 经营租赁会计的核算原则
  • 土地租赁费属于什么收入
  • 发票可以付款前开吗
  • 房开企业会计分录
  • 房产税的定义是什么
  • 营业成本怎么理解
  • 固定资产盘亏所得税清算时怎么处理
  • 权益法核算投资收益纳税调整
  • 新成立的公司怎样建账
  • 单位临时账户可以取现吗
  • 采购入库单如何弃审U8
  • 买二手设备需要签合同吗
  • 问答:分支机构是否需要设立账簿
  • 工业投资范围是什么
  • 配置是什么意思
  • 不用光盘不用u盘怎么安装系统
  • windows server 2008 r2激活密钥
  • mac怎么用bootcamp
  • macbook像素能不能提高
  • centos占用内存高
  • window系统大全
  • win8任务管理器快捷键
  • VMware10安装Windows server2012
  • ubuntu配置yum
  • linux查看可执行命令
  • spamsub.exe - spamsub进程是什么文件
  • SUSE Linux Enterprise Server 设置防火墙开启ssh远程端口的方法
  • centos云服务器
  • qcwlicon.exe - qcwlicon是什么进程 有何作用
  • 在windows7中,下列叙述中错误的是
  • linux中ctrl+c
  • windows7无法继续安装
  • linux安装linux
  • cocos2dx3d2d结合
  • uploadify文件上传
  • css旋转木马
  • unity 3d完全自学教程
  • 基于jQuery Ajax实现上传文件
  • html应用css
  • 为什么增值税是销项税减进项税
  • 新疆碧桂园三期最新消息
  • 增值税劳务费发票图片
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设