簡單理解 es6 class

2021-09-11 12:44:39 字數 2942 閱讀 4401

類即物件

es6**除錯最簡單的方法:直接在node控制台執行js,完全不需要考慮瀏覽器相容性而去安裝babel等編譯器的去編譯後再除錯

先舉個例子:

class

a start()

}複製**

乙個類就這麼產生了,只要new一下,這個類就可以被用了

let b = new a();

複製**

可能這個類將會有很多地方要使用,那麼將它模組化就行了

export

default a;

複製**

怎麼用這個模組呢?es6的初學知識,import就能搞定,路徑是以上模組檔案的路徑

import a from

'../a.js';

複製**

模組已經被匯入了,那麼怎麼用這個模組裡的類呢?

let b = new a();

複製**

emmmm,看著很眼熟啊,是不是跟乙個類的引用一樣?就是一樣。接下來就可以用這個b幹任何你想幹的事了。

那麼以上,乙個類從出生到開始生產就介紹完了。

接下來可以詳細介紹一下js的新星:class 類

class 類是es6引入的乙個概念,用來作為物件的模板,其實class的絕大部分功能es5都有,只不過class讓物件原型的寫法更加清晰了。將上面的例子與下面的es5的寫法對比一下便可以看出。

下面我們將上面那個class a 轉成es5的寫法:

function

a()a.prototype.start = function()

複製**

這裡可以看出來,start這個自定義屬性,在es5中需要通過prototype去實現。

class的用法跟es5上相比沒有較大差別,比如都是用new去例項化。

分別執行class a和es5下的function a,執行上面的**,發現它們的建構函式都是本身,也就是說,class本身就指向建構函式,function 本身同理。

繼續看上面的例子,a有乙個屬性是start,比較class和es5的寫法,可以看出,類上面的start是定義在類的prototype上的。這也是class的乙個特性,即類上的所有方法都是定義在物件的prototype上的,但是不需要在**上標明。

但若需要重寫start,仍需要通過prototype進行覆蓋

仍使用最上面的這個例子,雖然class的屬性是定義在prototype上的,但是卻是不可列舉的。

object.keys(obj),返回乙個陣列,陣列裡是該obj可被列舉的所有屬性。object.getownpropertynames(obj),返回乙個陣列,陣列裡是該obj上所有的例項屬性。

es6

es5

constructor方法是類的建構函式是預設方法,通過**new**命令生成物件例項時,自動呼叫該方法。乙個類必須有constructor方法,如果沒有顯式定義,乙個預設的constructor方法會被新增。

類的建構函式,不使用**new**是無法呼叫的。但es5是可以的,不妨回憶一下function的呼叫

與es5相同,類的所有例項共享乙個原型物件

總所周知,es5的變數提公升是非常常見的,因此,在es5中,並不需要關注function的定義位置,但是類不存在變數提公升,必須先定義才能使用,new必須在class之後。

在類裡宣告的類似上例中的condtructor和start,都是共有屬性,外部都是可以呼叫的,若需要私有方法,可將方法移出模組定義,如下面的aa()就是私有方法。

class

a start()

stop()

}function

aa()

複製**

在類中,無法像es5一樣能夠直接通過var或者function宣告私有方法,但也可以通過上述操作模擬實現私有方法。

類相當於例項的原型,所有類中定義的方法,都會被例項繼承。如果在乙個方法前,加上**static

class

a static start()

}複製**

這個時候生成乙個例項b,則b無法使用start()

看到這裡,是不是覺得好像可以用作上面的私有方法?但是,可以在原型a中使用啊。。。

看了上面的靜態方法,是不是會想到一下靜態變數?比如這樣:

class

a static aaaaa = "";

static start()

}複製**

但是,es6目前只存在靜態方法,不存在靜態屬性,es7上有靜態屬性的相關提案,寫法就如想象中的aaaaa。 以上,屬於個人學習es6的class的之後的簡單理解,若有錯誤請指出。

ES6 Class語法介紹

參考文章 ecmascript 6 入門 概述 基本上,es6 的class可以看作只是乙個語法糖,它的絕大部分功 能,es5 都可以做到,新的class寫法只是讓物件原型的寫法更加清晰 更像物件導向程式設計的語法而已。舉個栗子 es5 function point x,y point.protot...

ES6 Class基本用法

es6提供了更接近傳統語言的寫法,引入了class 類 這個概念,作為物件的模板。通過class關鍵字,可以定義類。基本上,es6的class可以看作只是乙個語法糖,它的絕大部分功能,es5都可以做到,新的class寫法只是讓物件原型的寫法更加清晰 更像物件導向程式設計的語法而已。1.我們先用建構函...

es6 Class 的例項物件

es6 生成類的例項物件的寫法,與 es5 完全一樣,也是使用new命令。前面說過,如果忘記加上new,像函式那樣呼叫class,將會報錯。class point 報錯 var point point 2 3 正確 var point new point 2 3 與 es5 一樣,例項的屬性除非顯式...