首頁 > web前端 > js教程 > 主體

什麼是Javascript語言的多態性

小云云
發布: 2018-01-29 13:45:56
原創
2410 人瀏覽過

Java語言是一門靜態類型的語言,由於在程式碼編譯時要進行嚴格的類型檢查,所以不能給變數不同類型的值,這種類型檢查就會使程式碼變得僵硬,但是java也可以透過繼承得到多型的效果(實現繼承和介面繼承) 可以向上轉型來實現多態。

多態的實際意義是,同一操作,作用在不同的物件上面,可以產生不同的解釋和不同的執行結果。 javascript的變數類型在運行期間是可變的,這意味著javascript物件的多態性是與生俱來的。

下面一張圖來解釋:

主人同時向雞和鴨兩個對象發出指令"發出叫聲", 雞和鴨同時發出叫聲,但是他們的叫聲是不一樣的。
什麼是Javascript語言的多態性

我們用程式碼來示範這個範例:

傳統的程式碼我們習慣用if else 來堆砌硬編碼程式碼,但如果這個對象一直往上加就會造成不斷的加代碼,修改代碼總是很危險的,修改的地方越多,程序出錯的可能性就會越大,而且當動物的類型越多的時候就會造成if else堆砌成了一個巨大的函數,不利於維護。

var makeSound = function(animal) {
     if (animal instanceof Dog) {
        console.log('wanwan');
     } else if(animal instanceof Cat) {
        console.log('miaomiao');
     }
}

var Dog = function() {}
var Cat = function() {}
makeSound(new Dog());
makeSound(new Cat());
登入後複製

修改之後的程式碼如下:

 var makeSound = function(animal) {
     animal.sound();
}
var Dog = function() {}
Dog.prototype.sound = function(){
   console.log('wanwan');
}

var Cat = function() {}
Cat.prototype.sound = function() {
   console.log('miaomiao');
}
makeSound(new Dog());
makeSound(new Cat());
登入後複製

如何理解如果物件無法回應某個請求,它會把這個請求委託給它的建構器的原型,這條原則是原型繼承的精髓所在,下面有這樣的一段程式碼:

var obj = {name:'lin'};

var A = function() {};

##A .prototype = obj;

var a = new A();

console.log(a.name);

解釋:遍歷物件a所有的屬性,沒有找到name這個屬性

查找name屬性的這個請求被委託給物件a的建構器的原型,它被a._proto_記錄並且指向A.prototype,
而A.prototype被設定為物件obj
在在物件obj中找到name屬性,並且傳回。

相關推薦:

如何學習JavaScript語言?學習重難點有哪些?

javascript語言結構小記(一)_基礎知識

#詳解JavaScript語言的基本語法需求_基礎知識


以上是什麼是Javascript語言的多態性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板