JS中的繼承操作實(shí)例總結(jié)
本文實(shí)例講述了JS中的繼承操作。分享給大家供大家參考,具體如下:
1.原型鏈繼承
function SuperType() { this.property = true; } SuperType.prototype.getSuperValue = function() { return this.property; } function SubType() { ths.subproperty = false; } SubType.prototype = new SuperType(); // 實(shí)現(xiàn)繼承 SubType.prototype.getSubValue = function() { return this.subproperty; } var instance = new SubType(); console.log(instance.getSuperValue()); // true
原理:讓SuperType的實(shí)例成為子類的原型對(duì)象,子類的實(shí)例擁有了父類的屬性和方法。但也有弊端,如果父類的屬性是引用類型,這將導(dǎo)致共享的屬性被改變的時(shí)候,全部的屬性將被改變,我們一下代碼。
function SuperType() { this.property = [1,2,3]; } SuperType.prototype.getSuperValue = function() { return this.property; } function SubType() { ths.subproperty = false; } SubType.prototype = new SuperType(); // 實(shí)現(xiàn)繼承 SubType.prototype.getSubValue = function() { return this.subproperty; } var instance1 = new SubType(); var instance2 = new SubType(); instance1.property.push(4); console.log(instance1.property); // [1,2,3,4] console.log(instance2.property); // [1,2,3,4]
我們修改一處的實(shí)例屬性,兩個(gè)實(shí)例的屬性都會(huì)被修改,因?yàn)檫@個(gè)屬性是共享的,這也是原型鏈繼承的缺點(diǎn)。
2.構(gòu)造函數(shù)繼承
function SuperType(name) { this.name = name; this.numbers = [1,2,3]; } function SubType() { SuperType.call(this,"Nicholas"); this.age = 29; } var instance1 = new SubType(); var instance2 = new SubType(); instance1.property.push(4); console.log(instance1.name); // Nicholas console.log(instance1.age); // 29 console.log(instance1.numbers); // [1,2,3,4] console.log(instance2.numbers); // [1,2,3]
在子類中調(diào)用父類的構(gòu)造函數(shù),每次實(shí)例化時(shí)都會(huì)新建父類的屬性放在新實(shí)例中,因此每個(gè)實(shí)例中的屬性都是不一樣的,改變一個(gè)實(shí)例的值不會(huì)造成另一個(gè)實(shí)例的值改變。這個(gè)繼承方式的缺點(diǎn)是方法的定義不能復(fù)用。
3.組合繼承
這個(gè)方法將原型鏈繼承和構(gòu)造函數(shù)繼承結(jié)合到一起,融合了他們各自的優(yōu)點(diǎn)。
function SuperType(name) { this.name = name; this.colors = ["red","blue","green"] } SuperType.prototype.sayName = function() { console.log(this.name); } function SubType(name,age) { SuperType.call(this,name); this.age = age; } SubType.prototype = new SuperType(); SubType.prototype.constructor = SubType; SubType.prototype.sayAge = function() { console.log(this.age); } var instance1 = new SubType("Nicholas", 29); var instance2 =new SubType("Greg", 27); instance1.colors.push("black"); console.log(instance1.colors); // red,blue,green,black console.log(instance2.colors); // red,blue,green instance1.sayName(); // Nicholas instance2.sayName(); // Greg instance1.sayAge(); // 29 instance2.sayAge(); // 27
4.class繼承
ES6中可以通過(guò)class創(chuàng)建對(duì)象,通過(guò)關(guān)鍵字extends繼承。
class Point { constructor(x, y) { this.x = x; this.y = y; } } class ColorPoint extends Point { constructor(x, y, color) { this.color = color; // ReferenceError super(x, y); this.color = color; // 正確 } }
在ES6的繼承中,子類一定要重寫父類的構(gòu)造函授的方法,否則會(huì)報(bào)錯(cuò)。
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《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)文章
ajax請(qǐng)求前端跨域問(wèn)題原因及解決方案
這篇文章主要為大家介紹了ajax請(qǐng)求前端跨域問(wèn)題原因及解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10支付寶小程序?qū)崿F(xiàn)類似微信多行輸入功能(思路詳解)
這篇文章主要介紹了支付寶小程序?qū)崿F(xiàn)類似微信多行輸入功能,輸入超過(guò) 8 行的時(shí)候會(huì)出現(xiàn)滾動(dòng),這樣做的好處就是輸入框不會(huì)直接頂?shù)巾?yè)面最頂部,支付寶小程序?qū)崿F(xiàn)多行輸入框:使用textarea多行輸入框?qū)崿F(xiàn),感興趣的朋友一起看看吧2024-02-02JS復(fù)制內(nèi)容到剪切板的實(shí)例代碼(兼容IE與火狐)
這篇文章主要介紹了JS復(fù)制內(nèi)容到剪切板的實(shí)例代碼(兼容IE與火狐)。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-11-11關(guān)于layui 彈出層一閃而過(guò)就消失的解決方法
今天小編就為大家分享一篇關(guān)于layui 彈出層一閃而過(guò)就消失的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09bootstrapValidator bootstrap-select驗(yàn)證不可用的解決辦法
這篇文章主要為大家詳細(xì)介紹了bootStrapValidator和bootStrap-select驗(yàn)證不可用的解決辦法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01Bootstrap datepicker日期選擇器插件使用詳解
這篇文章主要為大家詳細(xì)介紹了Bootstrap datepicker日期選擇器插件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07javascript強(qiáng)制彈出新窗口實(shí)現(xiàn)代碼
javascript強(qiáng)制彈出新窗口,主要是利用的動(dòng)態(tài)創(chuàng)建鏈接。2009-12-12JS中的算法與數(shù)據(jù)結(jié)構(gòu)之鏈表(Linked-list)實(shí)例詳解
這篇文章主要介紹了JS中的算法與數(shù)據(jù)結(jié)構(gòu)之鏈表(Linked-list),結(jié)合實(shí)例形式詳細(xì)分析了javascript中鏈表的概念、原理、定義及常用操作技巧,需要的朋友可以參考下2019-08-08