我们先看一段传统的继承代码:
复制代码 代码如下:
//定义超类
function Father(){
this.name = "父亲";
}
Father.prototype.theSuperValue = ["NO1","NO2"];
//定义子类
function Child(){
}
//实现继承
Child.prototype = new Father();
//修改共享数组
Child.prototype.theSuperValue.push("修改");
//创建子类实例
var theChild = new Child();
console.log(theChild.theSuperValue); //["NO1","NO2","修改"]
//创建父类实例
var theFather = new Father();
console.log(theFather.theSuperValue); //["NO1","NO2","修改"]
通过上面的代码,我们注意“加红”的代码,子类Child的原型对象是父类Father的一个实例(new Father()),我们在这里是调用new Father()对象中的theSuperValue属性,因为new Father()对象中没有此属性(只有name属性),因此会沿着原型链向它的原型对象(Father.prototype)中去找,找到后发现是一个数组,而且是引用类型,此时我们往此数组中添加一个字符串“修改”。
之后,我们新建了Child的实例对象theChild,当theChild调用theSuperValue属性时,首先它自己里面没有此属性,就会去它的原型对象(new Father)中去找,可惜这里也没有,接着会到new Father()的原型中去找,OK,在Father.prototype中找到了这个数组,发现是["NO1","NO2","修改"]。
再接着,我们创建了Father的实例对象theFather,同上,我们在Father.prototype中找到了这个引用类型的数组["NO1","NO2","修改"]。(当然,数组都是引用类型的!)
通过上面的赘述,本来已经理解原型链概念的朋友觉得是废话连篇,其实我也是呵呵,接下来我们再看一个相似的例子:
复制代码 代码如下:
//定义超类
function Father() {
this.name = "父亲";
}
Father.prototype.theSuperValue = ["NO1", "NO2"];
//定义子类
function Child() {
}
//实现继承
Child.prototype = new Father();
//修改共享数组
Child.prototype.theSuperValue = ["我是覆盖代码"]
//创建子类实例
var theChild = new Child();
console.log(theChild.theSuperValue);
//创建父类实例
var theFather = new Father();
console.log(theFather.theSuperValue);
我们看一下上面的代码,我用一种比较特别的紫色标注了此段代码与上段代码的小小区别,但结果却发生了“巨大”变化,见下面的截图:
为什么我说是巨大变化,是因为我们从“重用公共属性”过渡到“覆盖公共属性,建立自己特色属性”上来!我这里是用数组演示的,其实第二种情况常常用在Function中,用子类的方法来覆盖父类的方法。
在第二段代码中,我们需要关注的是紫色代码前的“=”号,它是赋值操作符。如果我们对Child.prototype及new Father()对象调用这个赋值操作符时,我们就在这个对象上“新建”了一个属性,当在下面的theChild实例上调用theSuperValue时,返回的当然是新属性值["我是覆盖代码"]。
但当我们新创建一个父类实例theFather对象时,调用该对象上的theSuperValue属性,我们就会发现对象上并没有啊,这是为什么呢?因为我们刚才覆盖的是Father对象new Father();而不是Father类,所以,通过Fater()构造函数创建的新对象theFather并不包含新建的属性,当然,接下来的事情大家都明白,就是沿着原型链向上找,OK,在Father.prototype中找到了,就是我们一开始定义的那个数组。
通过上面两个例子,我们在JS中使用原型提供的继承功能时,尤其是利用子对象操作原型方法、对象时,切记“=”号赋值与引用调用这两种不同的操作,因为他们会带来完全不同的结果。
相关推荐:
AI免费生成文章的软件:轻松创作的秘密武器
什么是seo在线咨询,什么是seo在线咨询服务 ,unreal ai
seo自己做什么,自己做seo需要花钱吗 ,ai850775
seo算是什么营销方式,seo是网络营销吗 ,ai318
seo用什么写属性写,seo属于什么 ,芭田科学施肥AI
SEO关键词利器:如何借助精准关键词提升网站流量与排名,ai绘画客户
SEO提高:如何通过精准优化让网站流量翻倍,优化排名seo加盟费用
个性化广告:新时代营销的秘密武器,建设经营性网站怎么记账
ChatGPT发生故障,背后隐藏着哪些不为人知的原因与挑战?,硬件ai和软件ai
互联网快排:助力企业网站流量爆发的秘密武器,西安网站建设找资源公司
SEO新手必看:从零开始SEO优化的终极指南,随州网站优化技巧
SEO优化要钱吗?揭秘SEO投资背后的价值与回报,ai领域
seo,seoul city ,ai精洗
2025年整站SEO排名优化策略:让你的网站脱颖而出,id排版ai
SEO到底怎么做?揭秘从零到精通的完整SEO优化攻略,鸟瞰ai
产品seo什么意思,产品seo标题是什么 ,ai模仿张宇
AI助手Stut:智能时代的创新引擎,开启未来工作新篇章,ai对ai的格斗游戏
文章AI指令提升写作效率的智能助手
SEO场景下的数字营销:如何通过精准优化提升网站流量,陕西融发建设集团网站
SEO要点:提升网站排名的核心技巧与策略,福田市网站建设推广费用
SEO培训:助力企业实现互联网营销的无限可能,平塘网站优化推广价格
在线AI文章生成:内容创作新革命
智能AI写作生成:如何借助人工智能提升创作效率与质量
“关键词指白”:揭秘如何通过精准关键词优化实现流量暴增,全面分析网站seo
ChatGPT维护-智能时代的数字助手,如何让你的工作更高效,ai智能救援
ChatGPT的梯子:突破网络壁垒,畅享智能对话的全新体验,ai的音标1001ai的音标
ChatGPT:人工智能对话新时代的领航者,ai音响华为还是小米好
SEO运维:提升网站排名的核心战略,邢台网站建设优化建站
seo诊断什么意思,seo诊断a5 ,约瑟夫ai
SEO站内优化:提升网站排名的核心策略,厦门市网站优化企业
为什么“未备案域名”会成为互联网行业中的重要问题?,江干区seo优化价格
什么是“神马关键词”?如何用它提升你的网络营销效果?,新闻发布网站怎么做推广
seo网络上什么意思,seo表示什么 ,如何避免今日头条ai写作检测
SEO伪创:提升网站排名的危险策略与如何避免,怎样介绍社交网站推广
为什么seo推广那么多,seo推广难吗 ,东莞ai听译平台
SEO走动:提升网站流量的关键一步,SEO数据监控宝宝推荐
ChatGPT宕机恢复时间如何解决用户焦虑与技术背后的故事,ai人工智能写作火山
ChatGPT出现错误503?你需要知道的解决方案和应对策略,ai拉伸字效
SEO用户:如何为您的网站带来持续流量和转化,惠州网站推广哪个好
ChatGPT桌面应用安装了,不能用?解决方案全攻略,让你轻松畅享AI助手!,绫波丽ai智能
自动写文章的AI,提升效率的创作利器
亚马逊seo信息是什么,亚马逊seo关键词优化软件 ,光谷ai
seo经理做什么的,seo经理招聘 ,盲人ai眼镜
SEO优化的话题:助力企业成功的关键,夏杰ai智能管家
pbootcms自动翻译插件,让你的网站轻松实现多语言覆盖,ai 镀金
OpenAI推出的GPT-4Turbo大幅降低了AI应用成本,推动了AI技术的普及化,ai*版
seO经理是什么岗位,seo经理招聘 ,ai写作重复被查
seo需要了解什么,seo需要学些什么内容 ,ovo ai
什么是seo寄生虫,寄生虫seo原理 ,AI 疫
用AI写文章会不会查重率高?破解写作困扰的真相