成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Javascript 語言的多態(tài)

enali / 3327人閱讀

摘要:多態(tài)的實際含義是,同一操作,作用在不同的對象上面,可以產(chǎn)生不同的解釋和不同的執(zhí)行結(jié)果。的變量類型在運行期是可變的,這就意味著對象的多態(tài)性是與生俱來的。

多態(tài)的實際含義是,同一操作,作用在不同的對象上面,可以產(chǎn)生不同的解釋和不同的執(zhí)行結(jié)果。
javascript的變量類型在運行期是可變的,這就意味著javascript對象的多態(tài)性是與生俱來的。

Java語言是一門靜態(tài)類型的語言,由于在代碼編譯時要進(jìn)行嚴(yán)格的類型檢查,所以不能給變量賦予不同類型的值,這種類型檢查就會使代碼變得僵硬,但是java也可以通過繼承得到多態(tài)的效果(實現(xiàn)繼承和接口繼承) 可以向上轉(zhuǎn)型來實現(xiàn)多態(tài)。

下面一張圖來解釋:

主人同時向雞和鴨兩個對象發(fā)出指令 "發(fā)出叫聲", 雞和鴨同時發(fā)出叫聲,但是他們的叫聲是不一樣的。

我們用代碼來演示這個例子:

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

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());

如何理解如果對象無法響應(yīng)某個請求,它會把這個請求委托給它的構(gòu)造器的原型,這條原則是原型繼承的精髓所在,下面有這樣的一段代碼:

var obj = {name:"lin"};

var A = function() {};

A.prototype = obj;

var a = new A();
console.log(a.name);

解釋:遍歷對象a所有的屬性,沒有找到name這個屬性
查找name屬性的這個請求被委托給對象a的構(gòu)造器的原型,它被a._proto_記錄并且指向A.prototype,
而A.prototype被設(shè)置為對象obj
在對象obj中找到name屬性,并且返回

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92694.html

相關(guān)文章

  • javascript設(shè)計模式與開發(fā)實踐(一)- 多態(tài)

    摘要:當(dāng)我們對一些函數(shù)發(fā)出調(diào)用的消息時,這些函數(shù)會返回不同的執(zhí)行結(jié)果,這是多態(tài)性的一種體現(xiàn),也是很多設(shè)計模式在中可以用高階函數(shù)來代替實現(xiàn)的原因。 PS:上一篇文章發(fā)表之后,很多朋友關(guān)注了本人的思否和掘金的博客,雖然關(guān)注的朋友還有有限,但足夠讓我把自己在技術(shù)上的問題積累分享給大家,也希望大家能夠喜歡,同時能動一動手指,給一顆心(贊),博主會持續(xù)更新下去 多態(tài) 本文是《javascript設(shè)計模...

    wthee 評論0 收藏0
  • JavaScript設(shè)計模式與開發(fā)實踐 | 01 - 面向?qū)ο?em>的JavaScript

    摘要:在中,并沒有對抽象類和接口的支持。例如,當(dāng)對象需要對象的能力時,可以有選擇地把對象的構(gòu)造器的原型指向?qū)ο螅瑥亩_(dá)到繼承的效果。本節(jié)內(nèi)容為設(shè)計模式與開發(fā)實踐第一章筆記。 動態(tài)類型語言 編程語言按數(shù)據(jù)類型大體可以分為兩類:靜態(tài)類型語言與動態(tài)類型語言。 靜態(tài)類型語言在編譯時已確定變量類型,動態(tài)類型語言的變量類型要到程序運行時,待變量被賦值后,才具有某種類型。 而JavaScript是一門典型...

    suxier 評論0 收藏0
  • javascript面向?qū)ο笾?em>多態(tài)”

    摘要:之前,本質(zhì)上不能算是一門面向?qū)ο蟮木幊陶Z言,因為它對于封裝繼承多態(tài)這些面向?qū)ο笳Z言的特點并沒有在語言層面上提供原生的支持。所以在中出現(xiàn)了等關(guān)鍵字,解決了面向?qū)ο笾谐霈F(xiàn)了問題。 ES6之前,javascript本質(zhì)上不能算是一門面向?qū)ο蟮木幊陶Z言,因為它對于封裝、繼承、多態(tài)這些面向?qū)ο笳Z言的特點并沒有在語言層面上提供原生的支持。但是,它引入了原型(prototype)的概念,可以讓我們以...

    JerryWangSAP 評論0 收藏0
  • 更好理解面向?qū)ο?em>的Javascript 1 —— 動態(tài)類型和多態(tài)

    摘要:動態(tài)類型語言和鴨子類型編程語言按照數(shù)據(jù)類型大體可分為靜態(tài)類型語言和動態(tài)類型語言。鴨子類型的概念至關(guān)重要,比如一個對象有了屬性,也可以依照下標(biāo)來存取屬性,這個對象就可以被當(dāng)做數(shù)組來使用。 前言 曾經(jīng)對Javascript的面向?qū)ο笙嚓P(guān)知識也有過了解,從各種博客、書籍上也學(xué)到了很多。但是最近在看《Javascript設(shè)計模式與開發(fā)實戰(zhàn)》這本書時發(fā)現(xiàn)該書對這方面的知識點介紹的很易于理解,因此...

    shusen 評論0 收藏0
  • 學(xué)習(xí)設(shè)計模式前需要知道事情

    摘要:為什么要學(xué)習(xí)設(shè)計模式做事情之前問個為什么總是好的。設(shè)計模式的使用方法關(guān)于使用方式,像我這種初學(xué)者最容易犯的錯誤就是生搬硬套,但是模仿本來也是學(xué)習(xí)的一個過程,最重要的事情是在模仿中要學(xué)會思考。 為什么要學(xué)習(xí)設(shè)計模式? 做事情之前問個為什么總是好的。關(guān)于設(shè)計模式的好壞,我在知乎上也看過一些討論,有知友對其提出過一些疑問,里面有一些關(guān)于設(shè)計模式的觀點: 設(shè)計模式有何不妥,所謂的荼毒體現(xiàn)在哪...

    kviccn 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<