最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Javascript中的原型OOP

 更新時間:2016年10月12日 09:20:56   作者:坦蕩  
相信現(xiàn)在的很多程序員或多或少的都會寫JS,大部分也知道JS是基于原型的語言,但是如果問及JS原生對象(Object,Function,Array,Date等)的這個原型鏈長什么樣子?估計能回答出來的人就少了,所以這篇文章就給大家詳細介紹下,有需要的可以參考借鑒。

前言

JavaScript原型鏈對于對于很多剛學習Javascript的新手們來書總顯得神秘不好理解,但如果你想深入的學習Javascript,就不得不去研究以下了,或許你很少有機會來使用它,不過我想說機會總是留給有準備的人,下面我們這篇文章就來學習一下。

百度百科中,這樣描述了property:在JavaScript中,prototype對象是實現(xiàn)面向?qū)ο蟮囊粋€重要機制。每個函數(shù)就是一個對象(Function),函數(shù)對象都有一個子對象 prototype對象,類是以函數(shù)的形式來定義的。prototype表示該函數(shù)的原型,也表示一個類的成員的集合。

實踐中理解

那么我在瀏覽器中做出如下實驗:

你可以看到我定一個Test“類型”. 我使用typeof獲取Test“類型”的類型結(jié)果為function,結(jié)果告訴我們他是一個類。下面我又繼續(xù)獲取Test.prototype的類型,也就是原型的類型,結(jié)果為object,告訴我們這是一個對象。在對象中附加了一系列方法和屬性,你就理解什么是object. 既然我們知道這是一個對象,我們就可以向?qū)ο笊献鲆幌盗械牟僮髁恕?/p>

請看代碼:

<script>
    //來兩個參數(shù)>>品牌,型號
    function Car(carBrand, model) {
      this.carBrand = carBrand;
      this.model = model;
    }
    //來一個方法>>加速方法
    Car.prototype.Acceleration = function () {
      console.log("this is " + this.carBrand + '--' + this.model);
    }
    //再來一個方法>>按喇叭
    Car.prototype.Hoot = function () {
      console.log("嘀嘀嘀");
    }
    //來一個屬性>>輪子數(shù)量
    Car.prototype.Wheel = 4;

    //特斯拉>>來三個參數(shù)>>品牌,型號,動力
    function Tesla(carBrand, model ,power) {
      Car.call(this, carBrand, model);
      this.power = power;
    }

    Tesla.prototype = Object.create(Car.prototype);//創(chuàng)造一個空對象,并且使其原型指向參數(shù),也就是Car.prototype.
    Tesla.prototype.constructor = Tesla; //取消不影響整體流程,但為了保持一致 特斯拉構(gòu)造,如果沒有此行代碼,則constructor為Car

    Tesla.prototype.Acceleration = function () {
      console.log("this is " + this.carBrand + '--' + this.model+" And Drive by "+this.power);
    }
    //特斯拉獨有的 GetGirl你懂的方法
    Tesla.prototype.GetGirl = function () {
      console.log('yes,fucking car...');
    }

    //特斯拉 modelX 電動
    var modelX = new Tesla("Tesla", "ModelX", "electric power");
    console.log(typeof modelX);
    modelX.Acceleration();
    console.log(modelX.Wheel);
    modelX.GetGirl();
    modelX.Hoot();
    console.log(Tesla.prototype.constructor);
  </script>

在代碼中我做了一系列注釋,也開了一把特斯拉。我定義了Car這個類型,并且在得到Car的對象的時候你需要兩個參數(shù),品牌和型號。有一個加速,一個鳴笛的方法。下面我希望特斯拉能繼承Car的基礎(chǔ)方法和屬性。繼而我定義了Tesla類型,并且在其中通過call調(diào)用父類的方法,你可能在此處看不到這個調(diào)用有什么意義,因為Car類型中不過只是賦值而已,如果真是做一系列的復雜邏輯操作后賦值(車輛生產(chǎn)),那就會感受到用處啦。

輸出結(jié)果

看一下輸出結(jié)果,不用問為什么,繼續(xù)往下看。

你看到了輸出》我是特斯拉ModelX,電動車。其他的輸出不一一詳述。

特斯拉的prototype原型指向的是一個Car原型,為什么不直接賦值呢 ?原因就是直接賦值原型時,子類原型對象的附加屬性和方法,會被帶到父類。

而后將Tesla的原型構(gòu)造指向其本身,如果不指向本身,那么其原型構(gòu)造就是Car,雖不會影響整體流程,但為了保證一致性,還是將其原型構(gòu)造保持在Tesla.下面特斯拉擁有和父類同名的加速方法。也擁有了你懂的GetGirl的自身方法,你可以自己手動調(diào)用并看到父類原型對象上并沒有子類的方法。

在子類調(diào)用父類同名方法時,則會選擇子類的調(diào)用。而子類Tesla不擁有鳴笛方法,prototype沿著原型鏈向父親查找,則可以調(diào)用父類的按喇叭方法。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • Bootstrap風格的WPF樣式

    Bootstrap風格的WPF樣式

    此樣式基于bootstrap-3.3.0,樣式文件里的源碼行數(shù)都是指的這個版本.這篇文章主要介紹了Bootstrap風格的WPF樣式的相關(guān)資料,需要的朋友參考下
    2016-12-12
  • 百度移動版的url編碼解碼示例

    百度移動版的url編碼解碼示例

    這篇文章主要介紹了百度移動版的url編碼解碼的具體實現(xiàn),需要的朋友可以參考下
    2014-04-04
  • 原生js實現(xiàn)簡單的Ripple按鈕實例代碼

    原生js實現(xiàn)簡單的Ripple按鈕實例代碼

    本篇文章主要介紹了原生js實現(xiàn)簡單的Ripple按鈕實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • JavaScript實現(xiàn)繼承的7種方式總結(jié)

    JavaScript實現(xiàn)繼承的7種方式總結(jié)

    用官方點的話講繼承是面向?qū)ο笕筇卣髦?,可以使得子類具有父類的屬性和方法,同時還可以在子類中重新定義以及追加屬性和方法。本文整理了JavaScript實現(xiàn)繼承的7種方式,需要的可以了解一下
    2023-04-04
  • JS動態(tài)創(chuàng)建元素的兩種方法

    JS動態(tài)創(chuàng)建元素的兩種方法

    這篇文章主要為大家詳細介紹了JS動態(tài)創(chuàng)建元素的兩種方法,字符串拼接形式,或是使用Document、Element對象自帶的一些函數(shù) ,需要的朋友可以參考下
    2016-04-04
  • 純js+css實現(xiàn)在線時鐘

    純js+css實現(xiàn)在線時鐘

    這篇文章主要為大家詳細介紹了純js+css實現(xiàn)在線時鐘,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • javascript+Canvas實現(xiàn)畫板功能

    javascript+Canvas實現(xiàn)畫板功能

    這篇文章主要為大家詳細介紹了javascript+Canvas實現(xiàn)畫板功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • javascript實現(xiàn)移動端觸屏拖拽功能

    javascript實現(xiàn)移動端觸屏拖拽功能

    這篇文章主要為大家詳細介紹了javascript實現(xiàn)移動端觸屏拖拽功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • JS繼承定義與使用方法簡單示例

    JS繼承定義與使用方法簡單示例

    這篇文章主要介紹了JS繼承定義與使用方法,結(jié)合完整實例形式分析了JavaScript繼承的基本定義、用法及操作注意事項,需要的朋友可以參考下
    2020-02-02
  • JavaScript數(shù)組操作詳解

    JavaScript數(shù)組操作詳解

    本文主要介紹了JavaScript的數(shù)組操作,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02

最新評論

贵溪市| 肇源县| 南投县| 即墨市| 科技| 黔江区| 新河县| 靖江市| 安吉县| 钟山县| 横峰县| 饶阳县| 阿荣旗| 隆德县| 汶川县| 鱼台县| 荆州市| 尚志市| 黄龙县| 祁阳县| 杭锦旗| 高雄市| 西乡县| 博白县| 凌源市| 永兴县| 尼木县| 大冶市| 同仁县| 承德市| 玛沁县| 张家川| 丹江口市| 时尚| 开化县| 通海县| 华池县| 大厂| 南华县| 衡阳县| 昌邑市|