最新要闻
- 【新要闻】如何去除新家的甲醛_如何去除新家的甲醛
- 环球热头条丨外星人AW620M无线鼠标上市:26000 DPI、140小时长续航
- 世界简讯:PC优化翻车!《卧龙:苍天陨落》官方道歉:将尽快推出更新补丁
- Pro版同款!荣耀Magic5至臻版影像泄露:5000万像素旗舰三摄
- 今日要闻!《LOL》英雄价格正式调整!全面下调
- 全球热议:理想L9车主实惨:白天打开星环模式灯 扣1分罚款100元?
- iPhone良品率不足50%也不怕 富士康又在印度设立新工厂
- 小鹏汽车欲靠P7“回血”:老款清库再降3.5万、新车下周上市
- 降价后真香了!特斯拉中国2月销量出炉:暴涨130%
- 9.98万起杀疯!比亚迪王朝系列2月销量超10万台:秦PLUS贡献3成
- 2月新能源汽车销量榜:比亚迪一家占比近4成 第三名暴走
- 世界资讯:委员蒋胜男谈35岁职场危机:根源是“996” 必须改变
- 今日讯!中国性能车!全新领克03 TCR赛车官图发布:售价超百万
- 快报:144MB缓存立大功 AMD锐龙7000X3D内存自由:4800都稳赢i9
- 环球观点:AMD RX 7900 XT价格全面雪崩:沦落到RTX 4070 Ti的级别
- 《旷野之息》发售6周年:续作《塞尔达传说:王国之泪》发布新预告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
天天即时看!实现js继承的几种方式以及他们的优缺点
7.实现继承的几种方式以及他们的优缺点
①类式继承(构造函数)
var father = function() { this.age = 52; this.say = function() { alert("hello i am "+ this.name " and i am "+this.age + "years old"); }} var child = function() { this.name = "bill"; father.call(this);} var man = new child();man.say();
特点就是创建子类实例时,可以向父类传递参数,可以实现多继承(call多个父类对象)
(资料图片)
缺点:
实例并不是父类的实例,只是子类的实例
只能继承父类的实例属性和方法,不能继承原型属性/方法
无法实现函数复用,每个子类都有父类实例函数的副本,影响性能
②组合式继承(伪经典继承)
将 原型链继承
和 经典继承
组合。使用原型链继承方式实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数复用,又保证每个实例都有各自的属性。
SuperType.prototype.greet = function() { return "hello~," + this.card.name;}•function SuperType(gender) { this.card = { name: "佩奇", age: 20, gender: gender }}
优点如上
不足:无论在什么情况下,都会调用两次超类型构造函数:一次是在创建子类型原型的时候,另一次是在子类型构造函数内部
③原型式继承
两种方法:
一、借用构造函数(本质上就是做了一次浅复制)
借用构造函数,在一个函数内部创建一个临时性的构造函数,然后将传入的对象作为这个构造函数的原型,最后返回这个临时类型的一个新实例。
二、使用Object.create() ES5通过增加Object.create()方法,将原型式继承的概念规范化了
// 借用构造函数function helperFun(targetObj) { function newFun() {} newFun.prototype = targetObj; return new newFun();}•let myObj = { username: "dog", age: 14, other: { hobby: "reading", taste: "sore" }}•console.log(myObj);let newObj = helperFun(myObj)newObj.username = "cat";newObj.other.hobby = "sleeping";console.log(newObj);--------------------------------------------------------// Object.create()let presentIbj = { username: "熊大", sex: "male", age: 19, greet() { console.log("name is " + this.username); }}•let newObj1 = Object.create(presentIbj);let newObj2 = Object.create(presentIbj);newObj1.username = "熊二";console.log(newObj1);console.log(newObj2);
④寄生式继承
寄生式继承就是创建一个仅用于封装继承过程的函数,该函数在内部以某种方式(使用原型式继承对一个目标对象进行浅复制,增强这个浅复制的能力)来增强对象,最后就好像像真的是它做了所有工作一样返回对象。引用类型的属性始终会被继承和共享。
/ 寄生式继承function helperFun(targetObj) { function newFun() {}; newFun.prototype = targetObj; return new newFun();}function packInherit(originObj) { let evalObj = helperFun(originObj); evalObj.greet = function() { console.log("hello~," + this.name); }; return evalObj;}let initObj = { name: "虹猫", like: ["reading", "running"], age: 20}let newObj1 = packInherit(initObj);console.log(newObj1); //[ "reading", "running", "蓝兔" ]newObj1.like.push("蓝兔");console.log(newObj1.like); //[ "reading", "running", "蓝兔" ]newObj1.greet(); //hello~,虹猫let newObj2 = packInherit(initObj);newObj2.name = "蓝兔";console.log(newObj2); //{ greet: [Function (anonymous)], name: "蓝兔" }newObj2.greet(); //hello~,蓝兔console.log(newObj2.like); //[ "reading", "running", "蓝兔" ]
优点就是:上手简单,无需单独创建构造函数。
缺点就是:函数复用率降低。
⑤寄生组合式继承
寄生组合继承是为降低父类构造函数的开销。通过借用构造函数来继承属性,通过原型链的混成形式来继承方法。本质上,就是使用寄生式继承来继承超类型的原型,然后再将结果指定给子类型的原型。
// 寄生组合式Super.prototype.say = function() { console.log(this.name);}function Super(name) { this.name = name, this.colors = ["red", "blue", "green"]}function Son(name, age) { this.age = age; Super.call(this, name)}var another = Object.create(Super.prototype);another.constructor = Son;var another = Object.assign(Son.prototype(), Super.prototype())// Son.prototype = another;var instance1 = new Son("duck", 19)instance1.instance1.colors.push("pink")var instance2 = new Son("cat", 18)
优点就是:只调用一次父构造函数,并且避免了在子原型上添加不必要,多余的属性。与此同时,原型链还能保持不变
缺点就是:代码太复杂
⑥class语法继承
// class继承class Parent { constructor(name, gender) { this.name = name; this.gender = gender; this.greet = function() { console.log("greet"); }; } speak() { console.log("parent speak") } static speak() { console.log("static speak") }}//class 子类 extends 父类class Son extends Parent { //在子类的构造方法中调用父类的构造方法 constructor(name, gender, hobby) { super(name, gender); this.hobby = hobby; } //子类中声明的方法名和父类中的方法名相同时,子类中的方法将覆盖继承于父类的方法 speak() { console.log("Son speak"); }}const grandson = new Son("lucky", "male", "reading");console.log(grandson.name, grandson.gender, grandson.hobby); //lucky male readinggrandson.greet(); //greetgrandson.speak(); //Son speakSon.speak(); //static speak
-
天天即时看!实现js继承的几种方式以及他们的优缺点
7 实现继承的几种方式以及他们的优缺点①类式继承(构造函数)varfather=function(){this age=52;this say=function(){ale
来源: 天天即时看!实现js继承的几种方式以及他们的优缺点
今热点:AI修复图片画质和视频画质的方法
【热闻】数学建模(一):LP 问题
【新要闻】如何去除新家的甲醛_如何去除新家的甲醛
2023年2月随笔-难产的“学系列”
关注:乘风破浪,遇见最佳跨平台跨终端框架.Net Core/.Net生态 - 深入OpenAI与马斯克、微软的秘密,通过API轻松接入ChatGPT
天天热推荐:git clone的时候出现出现 fatal: unable to access 'https://github.com/...':OpenSSL
第125篇: 期约Promise基本特性
环球速递!kong和konga的安装部署
视焦点讯!腾讯云短信的使用方法
06while循环
环球热头条丨外星人AW620M无线鼠标上市:26000 DPI、140小时长续航
世界简讯:PC优化翻车!《卧龙:苍天陨落》官方道歉:将尽快推出更新补丁
环球头条:多线程全面总结
怎么注册微信公众号?
Pro版同款!荣耀Magic5至臻版影像泄露:5000万像素旗舰三摄
今日要闻!《LOL》英雄价格正式调整!全面下调
全球热议:理想L9车主实惨:白天打开星环模式灯 扣1分罚款100元?
iPhone良品率不足50%也不怕 富士康又在印度设立新工厂
小鹏汽车欲靠P7“回血”:老款清库再降3.5万、新车下周上市
降价后真香了!特斯拉中国2月销量出炉:暴涨130%
9.98万起杀疯!比亚迪王朝系列2月销量超10万台:秦PLUS贡献3成
2月新能源汽车销量榜:比亚迪一家占比近4成 第三名暴走
世界资讯:委员蒋胜男谈35岁职场危机:根源是“996” 必须改变
今日讯!中国性能车!全新领克03 TCR赛车官图发布:售价超百万
排查系统执行SQL与数据库直接执行结果不一致的问题
每日资讯:详细剖析|袋鼠云数栈前端框架Antd 3.x 升级 4.x 的踩坑之路
记录--手摸手带你撸一个拖拽效果
天天讯息:VSCode官方的配置同步方案
快报:144MB缓存立大功 AMD锐龙7000X3D内存自由:4800都稳赢i9
环球观点:AMD RX 7900 XT价格全面雪崩:沦落到RTX 4070 Ti的级别
《旷野之息》发售6周年:续作《塞尔达传说:王国之泪》发布新预告
当前视点!中国围棋第一人易主!李轩豪超越柯洁 AI立大功
环球快讯:vivo推出“手语翻译官”应用:准确率可达80%以上
网络通信——TCP “三次握手“、“四次挥手“ 详解
PHP语言在线代码运行编译工具推荐
今日报丨JavaScript 回调函数属于闭包?
全球快看:ChatGPT开放API,上来就干到最低价,可以人手一个ChatGPT了
全球新动态:Spring事务使用注意事项
【全球独家】限制儿童支付金额方便了!微信青少年模式升级:一键开启上线
三排七座!仰望U8内饰曝光:比亚迪首款百万豪车来了
世界热门:刚失败一次后 日本不放弃:新一代运载火箭尝试再度发射
热到离谱?首个冲上20℃的北方省会诞生 下周或破30℃
欧洲2035年禁售燃油车要黄?德国公然反对!意大利:我也不同意
环球精选!登月用!中国新一代载人火箭预计2027年首飞
天天即时:《狂飙》“大嫂”高叶上手小米13:女神持机美如画
全球观速讯丨火山引擎 DataTester:A/B 实验如何实现人群智能化定向?
环球快资讯丨Redis分布式锁常见坑点分析
世界今日讯!eas里客户端保存,提交里增加校验规则和必填
访问者模式
世界微动态丨网友偶遇眼镜王蛇求助 博物杂志:务必远离、打输住院打赢坐牢
世界今亮点!Vtuber因直播《霍格沃茨之遗》被骚扰 宣布毕业
天天讯息:委员建议研究生招生规模动态扩大:缓解考研难
全球聚焦:收个滴滴Offer:从小伙三面经历,看看需要学点啥?
环球热资讯!Study for Go! Chapter one - Type
环球最新:手写模拟Spring底层原理-Bean的创建与获取
速看:兰博基尼领衔 今年值得期待的7款跑车 买不起还不能看看?
女子试用期被辞退 现场给HR普法:金句频出网友点赞称解气
每日聚焦:靠ChatGPT年入百万!合法还不限学历专业:一般人我不告诉他(doge)
全球新消息丨韩系车日子不好过!起亚狮铂拓界限时优惠:降3万还给大礼包
zip文件结构
头条:与时俱进推动智慧城市建设,智慧管网监测加强城市治理能力
全球视讯!Java项目集成工作流activiti,会签
简单介绍Python中如何给字典设置默认值
播报:LG:三星QD OLED电视更容易烧屏
世界聚焦:掏耳朵怎么就这么爽!
今日视点:不只全面屏!努比亚Z50 Ultra后摄惊艳:黄金镜皇组合
男子月薪3千相亲角“反向相亲”气到大妈 大爷理解:靠颜值吃饭
每日热文:吴京+杰森斯坦森主演!《巨齿鲨2》暑期上映 国内有望同步
环球视点!ffmpeg视频上传及压缩Linux配置篇下
世界快资讯:【Avalonia】【跨平台】关于Prism项目模块化在Linux下路径问题
浙大揭秘吃鱼为什么会变聪明 网友:告诉老默 我想吃鱼了
上海消保委提醒谨慎购买威马汽车:经营异常、消极应对投诉
特斯拉将放弃稀土材料 中国公司无惧:目前没有东西替代
即时:B站两款自研游戏将上线 CEO陈睿:能挣钱的游戏只剩下两种
《生化危机4:重制版》新演示/截图 里昂拯救黑丝碍事梨
焦点日报:配置资源管理Secret和ConfigMap
环球视点!Windows故障转移群集 和 SQLServer AlwaysOn 搭建教程
(数据库系统概论|王珊)第九章关系查询处理和关系优化-第一节:查询处理
全球速递!视频上传及压缩SpringBoot篇上
世界热门:el-input 使用 回车键会刷新页面的问题
全球最强!传音260W快充手机将亮相:10分钟内充满
性能对标奔驰大G 比亚迪“F品牌”首车曝光:够硬够强
世界快消息!传欧盟准备批准微软收购动视-暴雪
当前报道:女司机“神操作”:100来公里高速连撞4次 竟甩锅路太窄
世界视讯!又一大作优化翻车!《卧龙:苍天陨落》RTX 4090依旧闪退
12GB+256GB到手仅2699元!Redmi K60正式开启降价
温州特斯拉事故驾驶员家属发声:记不清车辆失控场景 妻子去世自责
环球时讯:中国航天员遇到外星人怎么办?载人航天总师:积极交流 星际合作
焦点要闻:漫威等好莱坞大片中国市场遇冷:大家不爱看了 不符合国人审美、文化观
550元 富士发布Instax Mini 12拍立得相机 支持APP存照片
环球即时:卷成白菜价!致态TiPlus 7100固态硬盘新史低:1TB仅549元
环球头条:马斯克10万亿美元“改造地球”背景下!特斯拉电机要完全不用稀土:专家回应有可能
读Java性能权威指南(第2版)笔记07_即时编译器上
今头条!天问二号任务已获得国家批准立项:要从小行星2016 HO3采样返回
实现 Vue 折叠面板组件
委员:996制度是导致就业难、生育率低的重大原因
当前播报:电商价格战开打!京东百亿补贴上线:全场包邮 买贵双倍赔
特斯拉未来要狂暴降价:就靠这改变世界?其实都被骗了!
世界快资讯:豆瓣8.9分!韩国拼体格真人秀在欧美爆红