欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript ES6 Class類實現(xiàn)原理詳解

 更新時間:2020年05月08日 10:16:52   作者:阿吉萊加雷  
這篇文章主要介紹了JavaScript ES6 Class類實現(xiàn)原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

JavaScript ES6之前的還沒有Class類的概念,生成實例對象的傳統(tǒng)方法是通過構(gòu)造函數(shù)。

例如:

function Mold(a,b){
         this.a=a;
         this.b=b;
     }
     Mold.prototype.count=function(){
       return this.a+this.b;
     };
     let sum=new Mold(1,2);
    console.log(sum.count())  //3

這中寫法跟傳統(tǒng)的面向?qū)ο笳Z言差異較大,寫起來也比較繁雜。

ES6提供了更加接近其他語言的寫法,引入了Class(類)的概念,作為對象的模板,可以通過class關(guān)鍵字,定義類(類似python、java等);

當(dāng)然ES6的大部分功能再ES5都能實現(xiàn),ES6的class可以看作是一個語法糖,只是新的class定義類的寫法讓對象原型的寫法更加簡單明了、更接近與面向?qū)ο蟮木幊趟枷搿Ec上面ES5寫的類使用ES6實現(xiàn),例如:

class Mold{
       constructor(a,b){
         this.a=a;
         this.b=b;
       }
       count(){
         return this.a+this.b;
       }
    }
    let sum=new Mold(1,2);
    console.log(sum.count())  //3

這里ES6的類,只需用class定義,并且類的方法不需要用function定義;還有ES6的constructor方法,代表這該類的構(gòu)造方法;并且它的this關(guān)鍵字指向著實例對象。這里ES5的構(gòu)造函數(shù)Mold,相當(dāng)于ES6Mold類的constructor方法。

constructor

ES6實例對象的構(gòu)造函數(shù)就是該類本身;并且當(dāng)我們new 類名()就是執(zhí)行了constructor這個函數(shù)。

例如:

class Mold{
       constructor(){
        console.log("aaa")
       }
    }
 let m=new Mold();// aaa
 console.log(m.constructor===Mold);//true

上面代碼Mold類的constructor,實例化對象時執(zhí)行默認(rèn)constructor;

任何對象都有構(gòu)造函數(shù),并且構(gòu)造函數(shù)與當(dāng)前對象的類是相同;

例如:

let arr=new Array();
 console.log(arr.constructor===Array);//true
 let str=new String();
 console.log(str.constructor===String);//true
 let obj=new Object();
 console.log(obj.constructor===Object);//true

  2. 類的繼承 extends

繼承父類后,子類會繼承父類所有的方法和屬性(包括靜態(tài)方法和屬性)

如果子類沒有定義constructor方法,會默認(rèn)被添加該方法

任何子類都有constructor方法;

例如:

//class 類名 extends 被繼承的類{}
Class Father{
   constructor(){
   }
   sum(){
     console.log("abc");
   }
   static fn(){
     console.log("hello")
   }
 }
 Class Son extends Father{
  
 }
 let s=new Son();
 s.sum()//abc,繼承了父類的sum()方法
 Son.fn()//hello 繼承了父類的靜態(tài)方法fn()

繼承后的子類方法的三種處理:

1). 完全繼承,不需要重寫這個方法,子類執(zhí)行繼承方法內(nèi)容與父類相同

2). 重寫覆蓋,只需要在這個類中重寫這個方法就可以覆蓋繼承過來的內(nèi)容

3). 加工,子類可以用super調(diào)用父類的方法或?qū)傩赃M(jìn)行加工,再加上子類自己的方法和屬性

  3. super

調(diào)用父類的構(gòu)造函數(shù)直接使用super(),并且可以傳參;

子類的構(gòu)造函數(shù)中,只有調(diào)用了super之后才可以使用this關(guān)鍵字,否則會報錯;

例如:

//super.父類函數(shù)();
 class Father{
   constructor(){
    console.log("bbb");
   }
 }
 class Son extends Father{
   constructor(x){
    this.x=x;//ReferenceError,報錯
    super();
    this.x=x;//正確
   }
 }
 let sum=new Son();//bbb

  4. 類的static靜態(tài)

在屬性或方法前面使用 static定義類的靜態(tài)屬性和方法;

所有的靜態(tài)屬性和靜態(tài)方法都不能通過實例化的對象調(diào)用;

需要通過類來調(diào)用,靜態(tài)屬性和靜態(tài)方法是類的專屬屬性和方法,和實例化對象無關(guān),比如數(shù)組和數(shù)學(xué)方法中的:Array.from();Math.random()。

例如:

class Mold{
     static x=0;
     y=1;
     static fn1(){
       console.log("aaa")
     }
     fn2(){
       console.log("bbb");
     }
    }
   let m=new Mold();
   console.log(m.x,m.y);//undefined , 1
   m.fn1(); // TypeError 
   m.fn2(); // bbb
   //需要通過類來調(diào)用
   Mold.fn1(); //aaa
   console.log(Mold.x);//0

靜態(tài)的使用場景:

一般靜態(tài)的方法是用來解決一系列該類型的方法;

解決具體類型的方法,不是解決某個具體對象的方法

靜態(tài)屬性,一般用于存儲該類型的一系列通用的屬性變量

這種存儲,在類創(chuàng)建的時候就已經(jīng)變成全局的了,可在任何地方調(diào)用,并且不會被自動銷毀

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 利用函數(shù)的惰性載入提高javascript代碼執(zhí)行效率

    利用函數(shù)的惰性載入提高javascript代碼執(zhí)行效率

    在 addEvent 函數(shù)每次調(diào)用的時候都要走一遍,如果瀏覽器支持其中的一種方法,那么他就會一直支持了,就沒有必要再進(jìn)行其他分支的檢測了
    2014-05-05
  • 一文詳解JavaScript的繼承機制

    一文詳解JavaScript的繼承機制

    在JavaScript中,繼承允許一個對象從另一個對象繼承屬性和方法,本文將詳細(xì)介紹JavaScript中的繼承機制,包括原型鏈、構(gòu)造函數(shù)、原型對象以及幾種實現(xiàn)繼承的方法,需要的朋友可以參考下
    2024-04-04
  • JS實現(xiàn)獲取進(jìn)今年第幾天是周幾的方法分析

    JS實現(xiàn)獲取進(jìn)今年第幾天是周幾的方法分析

    這篇文章主要介紹了JS實現(xiàn)獲取進(jìn)今年第幾天是周幾的方法,結(jié)合實例形式對比分析了JavaScript進(jìn)行日期與天數(shù)運算相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2018-06-06
  • 怎樣用Javascript實現(xiàn)建造者模式

    怎樣用Javascript實現(xiàn)建造者模式

    這篇文章主要介紹了怎樣用Javascript實現(xiàn)建造者模式,想學(xué)習(xí)設(shè)計模式的同學(xué),可以參考下
    2021-04-04
  • javascript下查找父節(jié)點的簡單方法

    javascript下查找父節(jié)點的簡單方法

    javascript下查找父節(jié)點的簡單方法...
    2007-08-08
  • js的新生代垃圾回收知識點總結(jié)

    js的新生代垃圾回收知識點總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于js的新生代垃圾回收的相關(guān)知識點內(nèi)容,有需要的朋友們可以參考學(xué)習(xí)下。
    2019-08-08
  • layui table 列寬百分比顯示的實現(xiàn)方法

    layui table 列寬百分比顯示的實現(xiàn)方法

    今天小編就為大家分享一篇layui table 列寬百分比顯示的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • js實現(xiàn)文字跟隨鼠標(biāo)移動而移動的方法

    js實現(xiàn)文字跟隨鼠標(biāo)移動而移動的方法

    這篇文章主要介紹了js實現(xiàn)文字跟隨鼠標(biāo)移動而移動的方法,實例分析了javascript處理鼠標(biāo)事件及文字特效的技巧,需要的朋友可以參考下
    2015-02-02
  • 詳解webpack babel的配置

    詳解webpack babel的配置

    本篇文章主要介紹了詳解webpack babel的配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • JS中cookie的使用及缺點講解

    JS中cookie的使用及缺點講解

    Cookie就是這樣的一種機制。它可以彌補HTTP協(xié)議無狀態(tài)的不足。在Session出現(xiàn)之前,基本上所有的網(wǎng)站都采用Cookie來跟蹤會話。下面通過本文給大家介紹JS中cookie的使用及缺點,需要的朋友參考下吧
    2017-05-05

最新評論