Java語言是一門靜態類型的語言,由於在程式碼編譯時要進行嚴格的類型檢查,所以不能給變數不同類型的值,這種類型檢查就會使程式碼變得僵硬,但是java也可以透過繼承得到多型的效果(實現繼承和介面繼承) 可以向上轉型來實現多態。
多態的實際意義是,同一操作,作用在不同的物件上面,可以產生不同的解釋和不同的執行結果。 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);
查找name屬性的這個請求被委託給物件a的建構器的原型,它被a._proto_記錄並且指向A.prototype,
而A.prototype被設定為物件obj
在在物件obj中找到name屬性,並且傳回。
以上是什麼是Javascript語言的多態性的詳細內容。更多資訊請關注PHP中文網其他相關文章!