當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
JavaScript面向对象——理解构造函数继承(类继承)
生活随笔
收集整理的這篇文章主要介紹了
JavaScript面向对象——理解构造函数继承(类继承)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
JavaScript面向?qū)ο蟆斫鈽?gòu)造函數(shù)繼承(類(lèi)繼承)
構(gòu)造函數(shù)式繼承(類(lèi)繼承)
function SuperClass(id) {// 引用類(lèi)型公有屬性this.books = ['JavaScript', 'Nodejs', 'Java']// 值類(lèi)型公有屬性this.id = id}// 父類(lèi)聲明原型方法SuperClass.prototype.showBooks = function () {console.log(this.books)}// 聲明子類(lèi)function SubClass(id) {SuperClass.call(this, id)}// 創(chuàng)建第一個(gè)子類(lèi)的實(shí)例var instance1 = new SubClass(10)// 創(chuàng)建第二個(gè)子類(lèi)的實(shí)例var instance2 = new SubClass(11)instance1.books.push('設(shè)計(jì)模式')// 打印結(jié)果console.log(instance1.books) // ['JavaScript', 'Nodejs', 'Java', '設(shè)計(jì)模式']console.log(instance1.id) // 10console.log(instance2.books) // // ['JavaScript', 'Nodejs', 'Java']console.log(instance2.id) // 11// 嘗試調(diào)用父類(lèi)prototype上的方法instance1.showBooks() // instance1.showBooks is not a functionSuperClass.call(this, id),這條語(yǔ)句是構(gòu)造函數(shù)式繼承的精華,由于call這個(gè)方法可以改變函數(shù)的作用環(huán)境,因此在子類(lèi)中對(duì)SuperClass調(diào)用這個(gè)方法就是在子類(lèi)中的變量在父類(lèi)中執(zhí)行一次,由于父類(lèi)的屬性是this指定的,因此子類(lèi)也就繼承了父類(lèi)的公有屬性,由于這種類(lèi)型的繼承沒(méi)有涉及prototype,所以父類(lèi)的原型方法不會(huì)被子類(lèi)繼承,如果想要被子類(lèi)繼承就必須放在構(gòu)造函數(shù)中,雖然解決了原型方式繼承中產(chǎn)生的一些弊端,但這樣創(chuàng)建出來(lái)的每個(gè)實(shí)例都會(huì)單獨(dú)有一份而不能共用,違背了代碼復(fù)用的原則,那么應(yīng)該如何解決呢?
接下來(lái)討論討論綜合原型繼承與構(gòu)造函數(shù)式繼承優(yōu)點(diǎn)的寄生組合繼承。
總結(jié)
以上是生活随笔為你收集整理的JavaScript面向对象——理解构造函数继承(类继承)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OneDrive无法打开登陆怎么办
- 下一篇: JavaScript面向对象——深入理解