国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

JS中的多態實例詳解

2024-05-06 16:40:20
字體:
來源:轉載
供稿:網友

 多態在面向對象編程語言中是十分重要的。在JAVA中是通過繼承來得到多態的效果。如下:

public abstract class Animal {abstract void makeSound(); // 抽象方法}public class Chicken extends Animal{public void makeSound(){System.out.println( "咯咯咯" );}}public class Duck extends Animal{public void makeSound(){System.out.println( "嘎嘎嘎" );}}Animal duck = new Duck(); // (1)Animal chicken = new Chicken(); // (2)

多態的思想實際上是把“做什么”和“誰去做”分離開來,要實現這一點,歸根結底先要消除類型之間的耦合關系。
在Java中,可以通過向上轉型來實現多態。而javascript的變量在運行期是可變的,一個js對象既可以表示既可以表示Duck類型的對象,又可以表示Chicken類型的對象,這意味著JavaScript對象的多態性是與生俱來的。

多態最根本的作用就是通過把過程化的條件分支語句轉化為對象的多態性, 從而消除這些條件分支語句。

假設我們要編寫一個地圖應用,現在有兩家可選的地圖API提供商供我們接入自己的應 用。目前我們選擇的是谷歌地圖,谷歌地圖的API中提供了show方法,負責在頁面上展 示整個地圖。示例代碼如下:

var googleMap = {show: function(){console.log( '開始渲染谷歌地圖' );}};var renderMap = function(){googleMap.show();};renderMap(); // 輸出:開始渲染谷歌地圖var googleMap = {show: function(){console.log( '開始渲染谷歌地圖' );}};var baiduMap = {show: function(){console.log( '開始渲染百度地圖' );}};var renderMap = function( type ){if ( type === 'google' ){googleMap.show();}else if ( type === 'baidu' ){baiduMap.show();}};renderMap( 'google' ); // 輸出:開始渲染谷歌地圖renderMap( 'baidu' ); // 輸出:開始渲染百度地圖

可以看到,雖然renderMap函數目前保持了一定的彈性,但這種彈性是很脆弱的,一旦需要替換成搜搜地圖,那無疑必須得改動renderMap函數,繼續往里面堆砌條件分支語句。

我們還是先把程序中相同的部分抽象出來,那就是顯示某個地圖:

var renderMap = function( map ){if ( map.show instanceof Function ){map.show();}};renderMap( googleMap ); // 輸出:開始渲染谷歌地圖renderMap( baiduMap ); // 輸出:開始渲染百度地圖

之后我們又新增了騰訊地圖的支持,那我們很快變可以實現這個功能,而且不必修改原代碼:

var TencentMap = {  show: function(){console.log( '開始渲染騰訊地圖' );}}renderMap( sosoMap ); // 輸出:開始渲染騰訊地圖

多態技術至關重要,很多設計模式都是巧妙利用多態來實現。

總結

以上所述是小編給大家介紹的JS中的多態實例,希望對大家有所幫助!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄂托克前旗| 台安县| 曲周县| 梅河口市| 昆山市| 镇雄县| 嘉祥县| 宁波市| 介休市| 芦山县| 迁西县| 广昌县| 闽侯县| 高安市| 鹤壁市| 四会市| 南靖县| 新营市| 精河县| 枞阳县| 台南市| 盈江县| 界首市| 曲水县| 襄汾县| 姚安县| 丰镇市| 古交市| 济宁市| 即墨市| 龙门县| 新巴尔虎左旗| 罗城| 来凤县| 精河县| 普洱| 金湖县| 杭锦后旗| 康保县| 广宁县| 高密市|