首頁  >  文章  >  web前端  >  JS中的多態實例詳解

JS中的多態實例詳解

韦小宝
韦小宝原創
2018-01-12 09:52:341260瀏覽

本文透過實例程式碼很詳細的給大家介紹了js中的多態,對JS有興趣的朋友一起看看JS中的多態實例詳解這篇文章吧

 多態在物件導向程式語言中是十分重要的。在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提供者供我們接入自己的應 用。目前我們選擇的是Google地圖,Google地圖的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中的多態實例,希望對大家有幫助!

相關推薦:

JS點擊連結切換顯示隱藏內容

#幾種JS開發中基本資料型別

JS實作點擊循環切換顯示內容

以上是JS中的多態實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn