91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS中的多態實例詳解

發布時間:2020-10-07 01:53:43 來源:腳本之家 閱讀:121 作者:qq_33203555 欄目:web開發

 多態在面向對象編程語言中是十分重要的。在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中的多態實例,希望對大家有所幫助!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天台县| 麦盖提县| 山东省| 孙吴县| 彰武县| 无棣县| 磐石市| 图片| 阳谷县| 唐山市| 高清| 老河口市| 深州市| 循化| 罗江县| 迁西县| 彝良县| 阳原县| 襄城县| 衡水市| 西乌珠穆沁旗| 天祝| 贵溪市| 儋州市| 朝阳区| 轮台县| 邮箱| 墨竹工卡县| 建德市| 会昌县| 灯塔市| 沈阳市| 綦江县| 黎川县| 莱阳市| 陈巴尔虎旗| 怀安县| 泸定县| 法库县| 富民县| 朝阳市|