成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

js面向?qū)ο筇卣?

Jenny_Tong / 2440人閱讀

摘要:我們都知道面向?qū)ο髶碛腥筇卣?,分別為封裝繼承多態(tài),其實(shí)在腳本語言中是不存在多態(tài)的,但是可以用的方式實(shí)現(xiàn)多態(tài)中的兩種效果重載重寫,那下面我們就來說一下面向?qū)ο蟮奶卣鞣庋b把抽象出的屬性和對(duì)屬性的方法封裝在一起對(duì)外實(shí)現(xiàn)接口開放,說白了就是封裝一

我們都知道js面向?qū)ο髶碛腥筇卣?,分別為封裝、繼承、多態(tài),其實(shí)在javaScript腳本語言中是不存在多態(tài)的,但是可以用js的方式實(shí)現(xiàn)多態(tài)中的兩種效果重載、重寫,那下面我們就來說一下面向?qū)ο蟮奶卣?/pre>
封裝
把抽象出的屬性和對(duì)屬性的方法封裝在一起對(duì)外實(shí)現(xiàn)接口開放,說白了就是封裝一個(gè)方法或是類可以傳入?yún)?shù),供相同功能的外界使用,來達(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)單的封裝例子,通過animal參數(shù)傳遞來達(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 語法糖內(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)格講是沒有多態(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ù),來實(shí)現(xiàn)不同的效果,其實(shí)這里也使用上面講到了的封裝,所以面向?qū)ο蟮奶卣魇菬o處不在

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/101977.html

相關(guān)文章

  • JavaScript面向對(duì)象的三大特征

    摘要:什么是面向?qū)ο蟊疚牟辉谡撌?。接下來說一下面向?qū)ο蟮娜筇卣髟诋?dāng)中的實(shí)現(xiàn)。封裝實(shí)現(xiàn)封裝實(shí)現(xiàn)就是是對(duì)象內(nèi)部的變化對(duì)外界是透明的不可見。這種做法使對(duì)象之間低耦合便于維護(hù)升級(jí)團(tuán)隊(duì)協(xié)作開發(fā)。。 概述 本來打算寫設(shè)計(jì)模式的,在談?wù)搄s的設(shè)計(jì)模式之前先說一下js的面向?qū)ο?因?yàn)楹芏嘣O(shè)計(jì)模式的實(shí)現(xiàn)都摻雜著面向?qū)ο蟮乃枷?所以先做一下前期鋪墊。 js我們都知道是一種動(dòng)態(tài)類型腳本型語言,變量類型無法保證,...

    chaosx110 評(píng)論0 收藏0
  • JS面向對(duì)象一:MVC的面向對(duì)象封裝

    摘要:自己的理解的第一個(gè)參數(shù)就是的值如果沒用默認(rèn)是那個(gè)調(diào)用函數(shù)的當(dāng)前的對(duì)象在全局作用域中就是被隱藏的所以不寫且在全局作用于調(diào)用函數(shù)的時(shí)候就是可以使用或者自己指定的指向 JS面向?qū)ο笠?MVC的面向?qū)ο蠓庋b MDNjavascript面向?qū)ο?面向?qū)ο?Object-Oriented) showImg(https://segmentfault.com/img/remote/1460000016...

    Scliang 評(píng)論0 收藏0
  • js面向對(duì)象編程的理解

    摘要:構(gòu)造函數(shù)對(duì)象初始化的瞬間被調(diào)用的方法。接下來看下自己做的一個(gè)小例子面向?qū)ο缶幊檀蠹液眠@是一輛它的顏色是它的內(nèi)飾是牧馬人越野車綠色的簡(jiǎn)約精致的法拉利跑車紅色的豪華舒暢的效果圖注構(gòu)造函數(shù)始終都應(yīng)該以一個(gè)大寫字母開頭。 js的面向?qū)ο缶幊痰睦斫?面向?qū)ο蟮恼Z言有一個(gè)標(biāo)志,即擁有類的概念,抽象實(shí)例對(duì)象的公共屬性與方法,基于類可以創(chuàng)建任意多個(gè)實(shí)例對(duì)象,一般具有封裝、繼承、多態(tài)的特性!但JS中對(duì)象...

    wuaiqiu 評(píng)論0 收藏0
  • 大前端2018現(xiàn)在上車還還得及么

    摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個(gè)屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對(duì)象事件框架選擇框架。核心模塊和對(duì)象全局對(duì)象,,,事件驅(qū)動(dòng),事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進(jìn)階、CSS進(jìn)階、div+css布局、HTML+css整站開發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對(duì)...

    stormgens 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<