JS實(shí)現(xiàn)面向?qū)ο罄^承的5種方式分析
本文實(shí)例講述了JS實(shí)現(xiàn)面向?qū)ο罄^承的5種方式。分享給大家供大家參考,具體如下:
js是門(mén)靈活的語(yǔ)言,實(shí)現(xiàn)一種功能往往有多種做法,ECMAScript沒(méi)有明確的繼承機(jī)制,而是通過(guò)模仿實(shí)現(xiàn)的,根據(jù)js語(yǔ)言的本身的特性,js實(shí)現(xiàn)繼承有以下通用的幾種方式
1. 使用對(duì)象冒充實(shí)現(xiàn)繼承(該種實(shí)現(xiàn)方式可以實(shí)現(xiàn)多繼承)
實(shí)現(xiàn)原理:讓父類的構(gòu)造函數(shù)成為子類的方法,然后調(diào)用該子類的方法,通過(guò)this關(guān)鍵字給所有的屬性和方法賦值
function Parent(firstname) { this.fname=firstname; this.age=40; this.sayAge=function() { console.log(this.age); } } function Child(firstname) { this.parent=Parent; this.parent(firstname); delete this.parent; this.saySomeThing=function() { console.log(this.fname); this.sayAge(); } } var mychild=new Child("李"); mychild.saySomeThing();
2. 采用call方法改變函數(shù)上下文實(shí)現(xiàn)繼承(該種方式不能繼承原型鏈,若想繼承原型鏈,則采用5混合模式)
實(shí)現(xiàn)原理:改變函數(shù)內(nèi)部的函數(shù)上下文this
,使它指向傳入函數(shù)的具體對(duì)象
function Parent(firstname) { this.fname=firstname; this.age=40; this.sayAge=function() { console.log(this.age); } } function Child(firstname) { this.saySomeThing=function() { console.log(this.fname); this.sayAge(); } this.getName=function() { return firstname; } } var child=new Child("張"); Parent.call(child,child.getName()); child.saySomeThing();
3. 采用Apply方法改變函數(shù)上下文實(shí)現(xiàn)繼承(該種方式不能繼承原型鏈,若想繼承原型鏈,則采用5混合模式)
實(shí)現(xiàn)原理:改變函數(shù)內(nèi)部的函數(shù)上下文this
,使它指向傳入函數(shù)的具體對(duì)象
function Parent(firstname) { this.fname=firstname; this.age=40; this.sayAge=function() { console.log(this.age); } } function Child(firstname) { this.saySomeThing=function() { console.log(this.fname); this.sayAge(); } this.getName=function() { return firstname; } } var child=new Child("張"); Parent.apply(child,[child.getName()]); child.saySomeThing();
4. 采用原型鏈的方式實(shí)現(xiàn)繼承
實(shí)現(xiàn)原理:使子類原型對(duì)象指向父類的實(shí)例以實(shí)現(xiàn)繼承,即重寫(xiě)類的原型,弊端是不能直接實(shí)現(xiàn)多繼承
function Parent() { this.sayAge=function() { console.log(this.age); } } function Child(firstname) { this.fname=firstname; this.age=40; this.saySomeThing=function() { console.log(this.fname); this.sayAge(); } } Child.prototype=new Parent(); var child=new Child("張"); child.saySomeThing();
5. 采用混合模式實(shí)現(xiàn)繼承
function Parent() { this.sayAge=function() { console.log(this.age); } } Parent.prototype.sayParent=function() { alert("this is parentmethod!!!"); } function Child(firstname) { Parent.call(this); this.fname=firstname; this.age=40; this.saySomeThing=function() { console.log(this.fname); this.sayAge(); } } Child.prototype=new Parent(); var child=new Child("張"); child.saySomeThing(); child.sayParent();
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T(mén)教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
Bootstrap實(shí)現(xiàn)下拉菜單多級(jí)聯(lián)動(dòng)
這篇文章主要為大家詳細(xì)介紹了Bootstrap實(shí)現(xiàn)下拉菜單多級(jí)聯(lián)動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11JS實(shí)現(xiàn)的左側(cè)豎向滑動(dòng)菜單效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)的左側(cè)豎向滑動(dòng)菜單效果代碼,涉及JavaScript響應(yīng)鼠標(biāo)點(diǎn)擊事件操作頁(yè)面元素樣式的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-109行javascript代碼獲取QQ群成員具體實(shí)現(xiàn)
22 行 JavaScript 代碼實(shí)現(xiàn) QQ 群成員提取器,如果沒(méi)有達(dá)到效果可能原因一是QQ版本升級(jí)了,二是博客里面的代碼也有些繁瑣2013-10-10JavaScript實(shí)現(xiàn)扯網(wǎng)動(dòng)畫(huà)效果的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用JavaScript語(yǔ)言實(shí)現(xiàn)扯網(wǎng)動(dòng)畫(huà)效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)JS有一定的幫助,需要的可以參考一下2022-06-06js實(shí)現(xiàn)Select下拉框具有輸入功能的方法
這篇文章主要介紹了js實(shí)現(xiàn)Select下拉框具有輸入功能的方法,實(shí)例分析了兩種比較常見(jiàn)的實(shí)現(xiàn)方法,是非常實(shí)用的技巧,需要的朋友可以參考下2015-02-02JavaScript定時(shí)器和優(yōu)化的取消定時(shí)器方法
這篇文章主要介紹了JavaScript定時(shí)器和優(yōu)化的取消定時(shí)器方法,本文著重講解一個(gè)優(yōu)化的取消定時(shí)器的方法,需要的朋友可以參考下2015-07-07JS實(shí)現(xiàn)很酷的水波文字特效實(shí)例
這篇文章主要介紹了JS實(shí)現(xiàn)很酷的水波文字特效,實(shí)例分析了javascript操作圖層特效的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02bootstrap導(dǎo)航條實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了bootstrap導(dǎo)航條的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12javaScript 刪除確認(rèn)實(shí)現(xiàn)方法小結(jié)
因?yàn)閷?duì)于內(nèi)容的刪除是件很重要的事,所以一般的系統(tǒng)中,都需要?jiǎng)h除確認(rèn)一下,以免誤刪,具體的方法如下,大家可以參考下。2009-12-12