類即物件
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 一樣,例項的屬性除非顯式...