日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

js面向对象特征

發(fā)布時(shí)間:2025/3/20 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js面向对象特征 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我們都知道js面向?qū)ο髶碛腥筇卣?#xff0c;分別為封裝、繼承、多態(tài),其實(shí)在javaScript腳本語(yǔ)言中是不存在多態(tài)的,但是可以用js的方式實(shí)現(xiàn)多態(tài)中的兩種效果重載、重寫,那下面我們就來(lái)說(shuō)一下面向?qū)ο蟮奶卣?

封裝

把抽象出的屬性和對(duì)屬性的方法封裝在一起對(duì)外實(shí)現(xiàn)接口開放,說(shuō)白了就是封裝一個(gè)方法或是類可以傳入?yún)?shù),供相同功能的外界使用,來(lái)達(dá)到相同的目的,便于對(duì)代碼的管理
  • 代碼

    class Package {constructor (animal){this.animal = animal}zoo (animal) {console.log('this is'+ this.animal)}static private () {console.log('我是私有方法')}}let newPackage = new Package('大象')newPackage.zoo()newPackage.private() // Uncaught TypeError: newPackage.private is not a function

    上面的一個(gè)比較簡(jiǎn)單的封裝例子,通過(guò)animal參數(shù)傳遞來(lái)達(dá)到我們想要的結(jié)果,但是class類里面的靜態(tài)方法是不會(huì)對(duì)外開放的所以會(huì)找不到這個(gè)函數(shù)

繼承

繼承可以使得子類具有父類別的各種屬性和方法,而不需要再次編寫相同的代碼。在令子類別繼承父類別的同時(shí),可以重新定義某些屬性,并重寫某些方法,即覆蓋父類別的原有屬性和方法,使其獲得與父類別不同的功能。另外,為子類追加新的屬性和方法也是常見的做法。
  • 代碼

    class PackageSon extends Package{constructor(animal, food){super(animal);this.food = food}zoo () {console.log('這是'+ this.animal)}eat () {console.log(this.animal+this.food)} }let newPackageSon = new PackageSon('大象', '吃草') newPackageSon.zoo() newPackageSon.eat()

上面的例子使用到了es6 class 語(yǔ)法糖內(nèi)的super方法,其實(shí)它是實(shí)現(xiàn)了在這里指向了父類中的this對(duì)象,然后子類的構(gòu)造函數(shù)再對(duì)其進(jìn)行修改,然后zoo函數(shù)實(shí)現(xiàn)了對(duì)父類的重寫,eat函數(shù)是子類新增的函數(shù)

多態(tài)

最開始我們已經(jīng)知道了js嚴(yán)格講是沒(méi)有多態(tài)的,多態(tài)可以表現(xiàn)出我們的代碼的多種狀態(tài),同一操作作用于不同的對(duì)象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果。
  • 重載表現(xiàn) 代碼
    // 重載

    class overload {init (callback) {if (callback === 'go') {console.log('我是go')}else if(callback === 'eat') {console.log('我是eat')}else {console.log('我是sprot')}} }var newOverload = new overload() newOverload.init('go') newOverload.init('eat') newOverload.init('sprot')

上面是一個(gè)重載的例子,它根據(jù)我們調(diào)用構(gòu)造函數(shù)傳入不同的參數(shù),來(lái)實(shí)現(xiàn)不同的效果,其實(shí)這里也使用上面講到了的封裝,所以面向?qū)ο蟮奶卣魇菬o(wú)處不在

  • 重寫表現(xiàn) 代碼
    // 重寫

    class rewrite {go () {console.log('我在走路')}sport () {console.log('我在運(yùn)動(dòng)')} } class rewriteSon extends rewrite{go () {console.log('我回家了')} }var newRewriteSon = new rewriteSon() newRewriteSon.go() newRewriteSon.sport()

上面是一個(gè)簡(jiǎn)單的重寫例子,我們這里用到了繼承,通過(guò)創(chuàng)建rewrite父類,編寫了兩個(gè)函數(shù)分別實(shí)現(xiàn)不同的操作,rewriteSon子類繼承了父類上面的兩個(gè)方法,子類中又重新寫了相同名字的go方法,所以子類會(huì)把繼承過(guò)來(lái)父類中的go方法覆蓋掉,從而實(shí)現(xiàn)自己想要的操作,打印sport方法時(shí)會(huì)依舊得出繼承父類方法的操作,所以子類只重寫了go方法

總結(jié)

以上是生活随笔為你收集整理的js面向对象特征的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。