Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JS原型继承和类式继承

JS原型继承和类式继承

作者头像
庞小明
发布于 2018-03-07 09:47:41
发布于 2018-03-07 09:47:41
3.6K00
代码可运行
举报
文章被收录于专栏:pangguomingpangguoming
运行总次数:0
代码可运行

类式继承(构造函数)

JS中其实是没有类的概念的,所谓的类也是模拟出来的。特别是当我们是用new 关键字的时候,就使得“类”的概念就越像其他语言中的类了。类式继承是在函数对象内调用父类的构造函数,使得自身获得父类的方法和属性。call和apply方法为类式继承提供了支持。通过改变this的作用环境,使得子类本身具有父类的各种属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();

原型继承

原型继承在开发中经常用到。它有别于类继承是因为继承不在对象本身,而在对象的原型上(prototype)。每一个对象都有原型,在浏览器中它体现在一个隐藏的__proto__属性上。在一些现代浏览器中你可以更改它们。比如在zepto中,就是通过添加zepto的fn对象到一个空的数组的__proto__属性上去,从而使得该数组成为一个zepto对象并且拥有所有的方法。话说回来,当一个对象需要调用某个方法时,它回去最近的原型上查找该方法,如果没有找到,它会再次往下继续查找。这样逐级查找,一直找到了要找的方法。 这些查找的原型构成了该对象的原型链条。原型最后指向的是null。我们说的原型继承,就是将父对像的方法给子类的原型。子类的构造函数中不拥有这些方法和属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var father = function() {
 
}
 
father.prototype.a = function() {
 
}
 
var child = function(){}
 
//开始继承
 
child.prototype = new father(); 
var man = new child(); 
man.a();

可以看到第七行实现了原型继承。很多人并不陌生这种方式。通过在浏览器中打印man我们就可以查看各个原型的继承关系。

可以看到逐级的关系child->object(father实例化的对象)->father。child是通过中间层继承了father的原型上的东西的。但是为什么中间还有一层object呢,为什么不把child.prototype = father.prototype。答案是如果这样做child和father就没有区别了。大家应该还记得在prototype中有个constructor属性,指向的是构造函数。按照正常的情况我们要把constructor的值改回来指向child的构造函数。但如果直接把father.prototype赋值给child.prototype,那么constructor应该指向谁呢?所以很显然只能通过中间层才能使得child和father保持为独立的对象。

对比

和原型对比起来,构造函数(类)式继承有什么不一样呢?首先,构造函数继承的方法都会存在父对象之中,每一次实例,都回将funciton保存在内存中,这样的做法毫无以为会带来性能上的问题。其次类式继承是不可变的。在运行时,无法修改或者添加新的方法,这种方式是一种固步自封的死方法。而原型继承是可以通过改变原型链接而对子类进行修改的。另外就是类式继承不支持多重继承,而对于原型继承来说,你只需要写好extend对对象进行扩展即可。

组合模式

另外的一种模式,是结合类继承和原型继承的各自优点来进行对父类的继承。用类式继承属性,而原型继承方法。这种模式避免了属性的公用,因为一般来说,每一个子类的属性都是私有的,而方法得到了统一。这种模式称为组合模式,也是继承类式常用到的一种方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function father() { 
  this.a = 'father'   
}
 
father.prototype.b = function() { 
   alert(this.a) 
}
 
var child = function() { 
  father.call(this) 
}
 
child.prototype = new father();

new 关键字和Obeject.create方法

在文章中,博主指出了使用new关键字的弊端。他说:“new关键字掩盖了JavaScript中真正的原型继承,使得它更像是基于类的继承。其实new关键字只是Javascript在为了获得流行度而加入与Java类似的语法时期留下来的一个残留物”。作者推荐我们使用Object.create方法创建或者实例化对象。露珠做过测试,使用new和使用object.create方法都是将对象添加到原型上去。我们可以看一下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var father = function() { 
    this.a = 'father'   
}
 
father.prototype.b = function() {alert(this.a)} 
var obj = new father();

在浏览器中打印obj,可以观察它的结构。它本身是一个对象,有自身属性,同时在其__proto__熟悉上也有b方法。在__proto__的后面有father,可以看出原型是自father来的。

那么objcet.create方法呢,我们也可以通过下面代码测试之:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var father = { 
  a: 'father', 
  b: function() { 
     alert(this.a); 
   } 
}
 
var obj = Object.create(father); 
console.dir(obj)

下面是浏览器输出的结果:

可以看到,用create的方法构造出来的对象,a属性和b方法都是在对象的原型上,也就是说我们可以通过更改father的属性动态改变obj的原型上的方法和属性,而上面通过new关键字用构造函数生成的实例,a属性是无法改变的。从这里,我们也可以看到类继承和原型基础的一些区别。

结论

原型继承比较符合js这种语言的特点。因为它本身就是js强大的原型的一部分。而类式继承,与其称它为继承方式,毋宁说是一种函数的运用技巧来模拟继承罢了。本文是卤煮的一己之见,错误偏颇在所难免,如果有之,请各位斧正。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-03-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
聊聊复旦发布的 MOSS ,国内版 ChatGPT
ChatGPT 是最先进的 AI,也是最热门的应用 —— 自去年 11 月底发布以来,它的月活跃用户两个月超过一亿,轻松拿到了全球互联网史上用户增长速度的第一。
二哥聊运营工具
2023/02/28
2.1K0
聊聊复旦发布的 MOSS ,国内版 ChatGPT
复旦抢发第一个中国版 ChatGPT !内测服务器被挤崩,团队致歉:还不成熟
作者 | 凌敏、刘燕 “MOSS 还是一个非常不成熟的模型,距离 ChatGPT 还有很长的路需要走。” 自去年 11 月底正式发布以来,OpenAI 最新的 AI 聊天机器人 ChatGPT 迅速成为现象级应用。瑞银发布的研究报告显示,ChatGPT 在今年 1 月,月活跃用户估计已达 1 亿,成为历史上用户增长最快的消费应用。 随着 ChatGPT 在全球范围内迅速走红,全球互联网大厂、创业公司纷纷加码布局。在国外,谷歌加急推出了人工智能聊天机器人 Bard Bard;在国内,百度将在 3 月推出类似
深度学习与Python
2023/02/28
3800
复旦抢发第一个中国版 ChatGPT !内测服务器被挤崩,团队致歉:还不成熟
MOSS 项目简介
MOSS是复旦大学自然语言处理实验室发布的一种类似于ChatGPT的会话语言模型。MOSS能够按照用户的指示执行各种自然语言任务,包括回答问题、生成文本、摘要文本、生成代码等。MOSS还能够挑战错误的前提,拒绝不适当的请求。
ytkah
2023/03/08
9570
MOSS 项目简介
复旦发布国内首个类ChatGPT模型!已开放内测申请,代码将于3月发布
Pine 萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 没想到,众人加班加点抢“中国版ChatGPT”热度时,首个国内类ChatGPT模型竟然已经发布了! 砸出这个重磅消息的,不是紧锣密鼓宣传的BAT大厂,也不是直接出手几亿的投资大V,而是这段时间来一直没吭气的复旦大学。 事情一出,直接引爆了一众社交媒体,不仅在微博刷出数个热搜话题,知乎更是冲上热榜第一。 各路“ChatGPT爱好者”连夜赶来围观,甚至由于官网访问人数太多,服务器一度被挤爆,又上了一次热搜。 这是怎么回事? 原来,复旦NLP团队
量子位
2023/02/23
4780
复旦发布国内首个类ChatGPT模型!已开放内测申请,代码将于3月发布
160亿参数,新增多项能力,复旦MOSS开源了
机器之心报道 编辑:蛋酱 今年 2 月份,机器之心报道了复旦大学推出中国版 ChatGPT 的消息(参见《复旦发布中国版 ChatGPT:MOSS 开启测试冲上热搜,服务器挤爆》),引起了广泛关注。当时,邱锡鹏教授就曾表示将于四月份开源 Moss。 昨天,开源版的 Moss 真的来了。 项目地址:https://github.com/OpenLMLab/MOSS MOSS 是一个支持中英双语和多种插件的开源对话语言模型,但参数数量比 ChatGPT 少得多。在 v0.0.2 之后,团队持续对其进行调整,推
机器之心
2023/05/01
2960
160亿参数,新增多项能力,复旦MOSS开源了
复旦邱锡鹏教授讲述 MOSS 2 研发进展:如何实现世界模型?
去年 ChatGPT 爆火后,国内迅速迎来了“百模大战”。其中,复旦大学自然语言处理实验室在去年 2 月率先发布了国内首个类 ChatGPT 的对话式大语言模型 MOSS,开放不到 24 个小时,由于瞬时访问压力过大,MOSS 服务器显示流量过载而无法访问。
深度学习与Python
2024/06/17
1990
复旦邱锡鹏教授讲述 MOSS 2 研发进展:如何实现世界模型?
中国版ChatGPT「MOSS」服务器被挤爆,复旦团队致歉:还不成熟
---- 新智元报道   编辑:编辑部 【新智元导读】2月20日,复旦大学邱锡鹏团队推出中国版ChatGPT「MOSS」。发布当晚,服务器被挤爆。2月21日,复旦MOSS团队致歉,称模型还不成熟。 今天,MOSS又火了。不仅登顶知乎热榜,收获近千万流量,还引来诸多媒体竞相报道。 不过,这次出圈的,不是陪刘培强流浪的MOSS,而是复旦大学研发的中国版ChatGPT。 国内首个对话式大型语言模型 ChatGPT自发布以来,已经收获了全球巨大关注。尤其是在春节后,ChatGPT突然走红,许多网友开始期待
新智元
2023/02/24
4740
中国版ChatGPT「MOSS」服务器被挤爆,复旦团队致歉:还不成熟
复旦清华联合顶刊发文|ChatGPT:潜力、前景和局限
---- 新智元报道   来源:信息与电子工程前沿FITEE 作者:周杰 柯沛 邱锡鹏 黄民烈 张军平 编辑:好困 【新智元导读】为更好地理解ChatGPT,这里我们简要介绍其历史,讨论其优点和不足,指出几个潜在应用,最后分析它对可信赖人工智能、会话搜索引擎和通用人工智能(artificial general intelligence, AGI)发展的影响。 最近,OpenAI发布了对话生成预训练模型Transformer(Chat Generative Pre-trained Transformer
新智元
2023/03/29
4530
复旦清华联合顶刊发文|ChatGPT:潜力、前景和局限
复旦MOSS大模型开源了!Github和Hugging Face同时上线
丰色 萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 复旦大模型MOSS,正式开源了! 作为国内首个开放测试的类ChatGPT产品,MOSS开源地址一放出,又冲上知乎热搜: 从官网介绍来看,MOSS是一个拥有160亿参数的开源对话语言模型。 它由约7000亿中英文及代码单词预训练得到,精度要求不那么高的话,甚至可以在单张3090显卡上运行。 MOSS支持中英双语,拥有多轮对话和使用多种插件双重能力,具备搜索引擎、文生图、计算器、方程求解的“技能点”。 目前,MOSS在GitHub上已有2.3k S
量子位
2023/05/06
3190
复旦MOSS大模型开源了!Github和Hugging Face同时上线
复旦邱锡鹏团队发布类 ChatGPT 模型 MOSS,现已暂停内测
百亿规模参数,MOSS 的英文回答水平较中文更高。 作者 | 黄楠 编辑 | 陈彩娴 2月20日,复旦大学自然语言处理实验室发布对话式大型语言模型 MOSS,该模型由邱锡鹏教授带队完成发布,上海人工智能实验室提供有力支持。 作为一个语言模型,MOSS 可执行对话生成、编程、事实问答等系列任务,比如让它回答关于“AI 取代人类工作”的问题: 也可以通过列举具体的指令,请它帮忙推荐电影: 或者是生成一段 Python 代码实现快速排序: 可以看到,MOSS 回答流畅,在不同场景上都有不凡的表现。 MOSS
AI科技评论
2023/02/23
4140
复旦邱锡鹏团队发布类 ChatGPT 模型 MOSS,现已暂停内测
MOSS & 混元 巅峰对话!2024大模型发展都在这里
2023 年,各大厂商争先投入 LLM 研发,一年内,在国内累计就有 200 余个大模型正式发布。尽管很多大模型并不完善,但行业内的研究专家及产业领袖都在为大模型的突破甚至 AGI 的发展,做着不懈探索。
腾讯云开发者
2024/01/17
5440
MOSS & 混元 巅峰对话!2024大模型发展都在这里
开放下载!复旦大学邱锡鹏教授发布教科书《神经网络与深度学习》
邱老师昨天就在知乎发布了这本书:「整本书终于写完了,虽然还有很多不足。但先告一段落,不然就得无限期拖延下去。感谢众多热心网友的意见和建议。全书的内容可以从这里(https://nndl.github.io/)下载。个人能力有限,书中难免有不当和错误之处,还望读者海涵和指正,不胜感激。」
机器之心
2019/04/29
1.3K0
开放下载!复旦大学邱锡鹏教授发布教科书《神经网络与深度学习》
复旦开源首个「中国版ChatGPT」MOSS!全新插件系统,能上网,会鸡兔同笼
---- 新智元报道   编辑:好困 Aeneas 【新智元导读】复旦NLP团队首次上线MOSS两个月后,他们遵照承诺,真的把MOSS开源了。同时,MOSS也成为了国内首个搭载插件系统的开源对话语言模型。 国内首个类ChatGPT模型MOSS,开源了! 这次,复旦团队的模型不仅更加成熟,而且还增加了「搜索引擎、计算器、解方程、文生图」等插件功能,既可在线体验,也支持本地部署—— 在FP16精度下单张A100/A800或两张3090显卡就能运行,而在INT4/8精度下只需一张3090即可。(但还没放出)
新智元
2023/05/09
4940
复旦开源首个「中国版ChatGPT」MOSS!全新插件系统,能上网,会鸡兔同笼
MarioGPT自动生成“超级玛丽”;周鸿祎:ChatGPT可能产生意识;国内版ChatGPT复旦首发,但“非常不成熟”
本周,AI业界又有哪些新鲜事? ChatGPT 国内版ChatGPT首发被复旦“抢注”,但非常不成熟? 虽然各大厂如火如荼地备战国内版“GPT”,但谁也没抢到这个“首发”:2 月 20 日晚,复旦大学自然语言处理实验室发布了国内首个类 ChatGPT 模型 MOSS,并邀请公众参与内测(https://moss.fastnlp.top/#/)。 从 MOSS 项目主页来看,其定位是“一个类似 ChatGPT 的对话式语言模型”,能按照用户指示执行各种自然语言任务,包括回答问题、生成文本、总结文本和生
AI科技大本营
2023/02/27
3380
MarioGPT自动生成“超级玛丽”;周鸿祎:ChatGPT可能产生意识;国内版ChatGPT复旦首发,但“非常不成熟”
国内“谁”能实现chatgpt,短期穷出的类ChatGPT简评(算法侧角度为主),以及对MOSS、ChatYuan给出简评,一文带你深入了解宏观技术路线。
ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI 研发的聊天机器人程序 ,于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文 等任务。
汀丶人工智能
2023/02/24
1K0
为Deeplearning提速----复旦fastNLP团队的内部调参利器fitlog
「有没有什么可以节省大量时间的 Deep Learning 效率神器?」有人在知乎上问出了这样一个问题。在回答区,复旦大学计算机科学技术学院副教授邱锡鹏介绍了他们实验室内部使用的调参利器——fitlog。
机器之心
2020/05/05
1.2K0
ACL 2022论文分享会Keynote嘉宾阵容重磅揭晓,5.21线上相见
随着人工智能的火热,AAAI、NeurIPS、CVPR 等顶级学术会议的影响力也愈来越大,每年接收论文、参会人数的数量连创新高。 ACL,作为国际最受关注的自然语言处理顶级会议,每年都吸引了大量华人学者投稿、参会,今年的 ACL 大会已是第 60 届,将于 5 月 22-5 月 27 举办。因为疫情原因,国内 NLP 从业者参与大会将受到很大的限制。 为了给国内 NLP 社区的从业人员搭建一个自由轻松的学术交流平台,机器之心组织了「ACL 2022 线上论文分享会」,定档 5 月 21 日云端相聚。 本次
机器之心
2022/05/12
4330
ACL 2022论文分享会Keynote嘉宾阵容重磅揭晓,5.21线上相见
机器之心ACL 2022论文分享会干货集锦,6月邀你来CVPR分享会
作为国际最受关注的自然语言处理顶级会议,每年的 ACL 都吸引了大量华人学者投稿、参会。今年的 ACL 大会已是第 60 届,于 5 月 22-5 月 27 日期间举办。 为了给国内 NLP 社区的从业人员搭建一个自由轻松的学术交流平台,2022 年 5 月 21 日,机器之心举办了「ACL 2022 论文分享会」线上学术交流活动。 本次 ACL 论文分享设置了 Keynote、 论文分享、企业招聘等环节,就业内关注的 Transformer、大规模预训练模型等 NLP 热门主题邀请顶级专家、论文作者与观众
机器之心
2022/05/27
7580
机器之心ACL 2022论文分享会干货集锦,6月邀你来CVPR分享会
复旦邱锡鹏:深度剖析 ChatGPT 类大语言模型的关键技术
分享嘉宾 | 邱锡鹏       整理 | 禾木木,梦依丹 出品 | CSDN(ID:CSDNnews) ChapGPT 自问世以来,便展现出了令世人惊艳的对话能力。仅用两个月时间,ChatGPT 月活跃用户就达一亿,是史上用户增速最快的消费应用。对于学术界、工业界、或是其他相关应用来说都是一个非常大的机会和挑战。 事实上,ChatGPT 的成功并不是偶然结果,其背后多有哪些创新之处,本文整理于「ChatGPT 及大模型专题研讨会」上复旦大学邱锡鹏教授带来的《对话式大型语言模型》的分享,他从大规模预训练语
AI科技大本营
2023/04/06
5800
复旦邱锡鹏:深度剖析 ChatGPT 类大语言模型的关键技术
复旦邱锡鹏新作:单机微调650亿参数大模型,业内人士:对大模型普及意义重大
具体而言,研究人员提出了名为LOMO(低内存优化)的新优化器,并在配备8卡RTX 3090(24GB内存)的单台服务器上,成功微调65B LLaMA。
量子位
2023/08/05
3200
复旦邱锡鹏新作:单机微调650亿参数大模型,业内人士:对大模型普及意义重大
推荐阅读
聊聊复旦发布的 MOSS ,国内版 ChatGPT
2.1K0
复旦抢发第一个中国版 ChatGPT !内测服务器被挤崩,团队致歉:还不成熟
3800
MOSS 项目简介
9570
复旦发布国内首个类ChatGPT模型!已开放内测申请,代码将于3月发布
4780
160亿参数,新增多项能力,复旦MOSS开源了
2960
复旦邱锡鹏教授讲述 MOSS 2 研发进展:如何实现世界模型?
1990
中国版ChatGPT「MOSS」服务器被挤爆,复旦团队致歉:还不成熟
4740
复旦清华联合顶刊发文|ChatGPT:潜力、前景和局限
4530
复旦MOSS大模型开源了!Github和Hugging Face同时上线
3190
复旦邱锡鹏团队发布类 ChatGPT 模型 MOSS,现已暂停内测
4140
MOSS & 混元 巅峰对话!2024大模型发展都在这里
5440
开放下载!复旦大学邱锡鹏教授发布教科书《神经网络与深度学习》
1.3K0
复旦开源首个「中国版ChatGPT」MOSS!全新插件系统,能上网,会鸡兔同笼
4940
MarioGPT自动生成“超级玛丽”;周鸿祎:ChatGPT可能产生意识;国内版ChatGPT复旦首发,但“非常不成熟”
3380
国内“谁”能实现chatgpt,短期穷出的类ChatGPT简评(算法侧角度为主),以及对MOSS、ChatYuan给出简评,一文带你深入了解宏观技术路线。
1K0
为Deeplearning提速----复旦fastNLP团队的内部调参利器fitlog
1.2K0
ACL 2022论文分享会Keynote嘉宾阵容重磅揭晓,5.21线上相见
4330
机器之心ACL 2022论文分享会干货集锦,6月邀你来CVPR分享会
7580
复旦邱锡鹏:深度剖析 ChatGPT 类大语言模型的关键技术
5800
复旦邱锡鹏新作:单机微调650亿参数大模型,业内人士:对大模型普及意义重大
3200
相关推荐
聊聊复旦发布的 MOSS ,国内版 ChatGPT
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验