什么是继承啊?答:别人白给你的过程就叫继承。
为什么要用继承呢?答:捡现成的呗。
好吧,既然大家都想捡现成的,那就要学会怎么继承!
在了解之前,你需要先了解构造函数、对象、原型链等概念......
JS里常用的两种继承方式:
原型链继承(对象间的继承)类式继承(构造函数间的继承)
原型链继承:
复制代码 代码如下:
//要继承的对象
var parent={
name : "baba"
say : function(){
alert("I am baba");
}
}
//新对象
var child = proInherit(parent);
//测试
alert(child.name); //"baba"
child.say(); //"I am baba"
利用proInherit(obj)方法,传入对象,就能实现对象的属性及方法的继承,这个方法不是内置方法,所以要自己定义,非常简单:
复制代码 代码如下:
function proInherit(obj){
function F () {}
F.prototype = obj;
return new F();
}
其中F()为一个临时的空的构造函数,然后将F()的原型设置为父对象,但是同时它又通过受益于_proto_链接而具有其父亲对象的全部功能。
链式图解:
类式继承:
复制代码 代码如下:
//父类构造函数
function Parent() {
this.name = "baba";
}
//父类原型方法
Parent.prototype.getName = function () {
return this.name;
}
//子类构造函数
function Child() {
this.name = "cc";
}
//类式继承
classInherit(Parent, Child);
//实例
var child = new Child();
alert(child.getName()) //“baba”
下面我们来看看这个继承的关键方法:classInherit(Parent,Child)
复制代码 代码如下:
var classInherit = (function () {
var F = function () { }
return function (P, C) {
F.prototype = P.prototype;
C.prototype = new F();
C.prototype.constructor = C;
}
}());
分析一下这个方法:
首先创建一个空的构造函数F(),用其实例的_proto_属性来构建父类与子类的原型链。起到一个代理的作用,目的是为了防止C.prototype = P.prototype,这样会在子类实例化后修改属性或方法时候,连同父类一起修改。整体采用即时函数并且在闭包中存储F(),防止多次继承时候创建大量的空的构造函数,从而减少消耗内存。最后一行的意思是,由于原型链的关系,C的实例对象的constructor会指向P,所以重新设置。
链式图解:
这种方式虽然在实例的时候继承了原型方法,但是父类的属性无法继承,下面介绍一种复制继承,算是对类式继承的补充。
复制继承:
复制代码 代码如下:
//复制继承
function copyInherit(p, c) {
var i,
toStr = Object.prototype.toString,
astr = "[object Array]";
c = c || {};
for (i in p) {
if (p.hasOwnProperty(i)) {
if (typeof p[i] === "object") {
c[i] = toStr.call(p[i]) == astr ? [] : {};
c[i] = copy(p[i], c[i]);
}
else {
c[i] = p[i];
}
}
}
return c;
}
//重写Parent
function Parent() {
this.name = "pp";
this.obj= {a:1,b:2};
this.arr= [1, 2]
}
//实例
var child = new Child();
var parent = new Parent();
copyInherit(parent, child);
alert(child.name) //"baba"
alert(child.arr) //1,2
alert(child.obj.a) //1
分析下copyInherit(p,c)
当一个值赋予一个变量时候,分为传值和传引用两种方式,当你父对象内属性包含数组类型或是对象类型时候, c[i] = toStr.call(p[i]) == astr ? [] : {};这一句会避免修改子对象属性而引起的父对象属性被篡改。
总结:
类式继承比较普遍,因为大家都比较熟悉这种构造函数方式,但是内存占用比较大。而原型式继承,占用内存比较小,但是包含数组,或者对象类型的克隆比较麻烦。复制继承简单,而且应用广泛。
相关推荐:
SEO网络营销:如何通过精准优化提升品牌价值,青州建设网站电话
ChatGLM不能搜索网页内容,你真的了解它的局限性吗?,ai修复情侣
为什么seo这么麻烦,seo是什么意思 为什么要做seo ,dota1ai地图命令选ai
怎么识别是AI写的文章
SEO检测,让网站排名飞升的秘密武器,高端快消食品营销推广
GPT在智能聊天机器人中的作用:重塑沟通体验,开创智能未来,百万级ai
SEO分类中内部优化的有:让你的网站脱颖而出!,by ai
SEO这样做,轻松引爆流量,助力企业成长,无极标准网站优化好处
seo都有什么意思,seo 啥意思 ,ai园林
SEO要求:如何优化网站提升搜索引擎排名,助力企业获取更多流量,鹤山区网站运营推广
文章去AI回归创作的本真之美
SEO合同:确保您网站优化成功的关键保障,微博营销推广规则最新
AI公众号文章生成,轻松打造爆款内容
什么是seo网络推广,seo网络推广技术 ,ai写真官方
AI文章比对技术:引领写作与内容审核的新革命,ai智能写作小说免费
WPQQ-开启数字时代的智能连接新纪元,杭州网站推广厂家电话
为什么做seo矩阵项目,为什么做seo矩阵项目不能做 ,怎么用ai写作
SEO建议:如何通过优化提升网站流量,赢得市场竞争,自媒体网站免费推广平台
ChatGPT页面无法访问?解决方案,让你轻松摆脱困扰!,ai染发颜色
SEO网:让你的数字营销更加精准高效,开启网络引流新时代,丰县互联网网站推广优势
文章疑似AI生成怎么办?如何辨别并应对AI生成文章的挑战
ChatGPT目前,我无法查看或打开附件,但我依然能为你提供全面的帮助,苹果ai谷歌ai
2024年AI写文章生成器推荐:让创作轻松高效,提升写作水平
SEO关键词利器:如何借助精准关键词提升网站流量与排名,ai绘画客户
SEO已经成为数字营销的核心,如何利用SEO提升网站流量和转化率,含山网站优化推广
实用AI工具:提升效率、优化生活的科技利器
ChatGPT免登录:轻松畅聊,无需注册,快速体验AI智能助手,眼泪ai
SEO可以帮助网站在搜索引擎中获得较高的排名-助力企业数字化转型的关键,赵立新AI换脸图片对比
怎么用AI写出令人惊叹的文章?轻松搞定写作难题!
SEO差价如何用SEO优化帮助企业实现成本与效益的完美平衡,盐城seo收费贵吗
SEO组织:让您的网站流量倍增的秘密武器,seo 绩效标准
AI文章精简-高效提炼与优化你的内容创作,ai quid
优化网站的秘诀:提高网站速度与用户体验,助力业务腾飞,旅游网站建设步骤
怎么用AI写出高质量科普文章?揭秘新时代创作利器!
SEO非常:如何利用SEO提升网站排名与流量,助力品牌快速成长,绥化短视频营销推广
SEO主要是为网站引流吗?深入解析SEO的核心价值,AI算算
为什么选择SEO会员服务,让您的网站流量飞速增长,靖边专业网站建设公司
什么是SEO优化方案,seo的优化方案 ,ai emorobot
“新热度”:引领潮流的力量,如何趋势的脉搏,浙江通用网站建设特点
云推SEO:让您的网站在激烈竞争中脱颖而出,网站优化公司欢迎来电
自动生成文章的AI软件,助力内容创作的未来
seo要会些什么,seo需要学些什么内容 ,轻盈ai
seo用什么论坛引流,seo引流方法 ,ai写作续写神器
SEO做法-提升网站流量与排名的关键秘诀,屏东网站推广招聘
SEO攻略:搜索引擎优化,快速提升网站排名,网站推广网站优化费用
SEO拓客,让您的业务飞速增长!,密云自适应网站建设
seO经理是什么岗位,seo经理招聘 ,ai写作重复被查
SEO搜索关键词是什么意思?让你轻松网站流量的秘密!,ai颜色不对
SEO地位:如何提升你的网站排名与曝光度,抢占市场先机,微营销网络推广
SEM+SEO:助力企业数字化营销的双剑合璧之道,ai头像丑