原來在es5中的寫法es6
定義好Point後,在原型對象上定義getPostion的方法瀏覽器
實例自身是沒有這個方法的,咱們調用的時候會去建立他的構造函數上原型上往上尋找函數
輸出的結果學習
調用getPosition方法this
有了類的概念用class去定義一個類。es5
constructor是構造函數,this指向建立的實例。每一個類的定義必須有constructor方法,若果你在定義類的時候沒有寫構造函數,它也會默認加上一個空的3d
getPosition方法是建立在Point的原型對象上的對象
多個方法之間能夠用分號隔開,切記不要用逗號blog
也能夠本身去返回一個對象繼承
本身定義了return的返回,那麼建立的實例就不在是你的實例了。這裏咱們使用instanceof來監測一下。返回的是false。咱們建立的結果並非你的類的實例的對象
es6中的類必須使用new 關鍵字去建立
生成的實例上添加屬性或者方法
判斷是不是實例上自身有的屬性,返回的結果是true說明自身就有這個屬性
方法不是自有屬性
getPostion其實是p1繼承來的
es6中加入了set和get關鍵字,來看下他們是怎麼使用的
設置爲19
看完這個例子大概就知道set和get大概是幹嗎的。把一個屬性age拆開成兩個存取值函數。
當咱們去讀取屬性值的時候,就會調用get修飾的方法。
當咱們給這個屬性賦值的時候就會調用set修飾的方法,set修飾的方法有個參數newValue 就是新賦的值
在es6中類也可使用set和set修飾
訪問屬性值
函數有兩種定義形式
class也有兩種形式的定義:
第一種
第二種方式
最後實際的類型是Infos
直接定義在類裏面的方法都會被實例繼承,若是不但願實例繼承某個方法,只想這個方法被類自己調用的時候,就須要將方法標記爲靜態方法
使用static關鍵字來標識一個靜態方法
每一個類裏面都有一個name屬性
es5裏面定義一個函數,打印出函數的name
只能Point本身調用。這就是靜態方法的定義
這裏定義的類,要添加到類上的屬性都是經過this來添加
另一種寫法在 constructor的外面,而且給了z的初始值爲0。這裏由於沒有安裝es的loader因此只能在瀏覽器裏面執行
es6中只有靜態方法,並無靜態屬性
經過這種形式能夠實現靜態屬性
目前es6並不提供私有方法私有屬性,須要使用一些技巧來實現
把方法定義在外面
經過實例是沒有辦法拿到func2的
第三中方用到es6中新增的基本數據類型symbol,惟一性,獨一無二的
這裏的p是沒有辦法拿到func1方法的
建立a.js
若是想調用必須拿到symbol值才能夠調用,這就是經過symbol值定義私有方法
就是屬性前面加#號,處於提案階段,暫時還無法使用
es6中新增的,通常用於構造函數中,返回new命令做用於的構造函數
new.target就表示構造函數
普通的調用方式
一樣在類中也可使用new.target
定義父類,子類繼承父類
雖然是在父類中使用的new.target.這裏的緣由下節課學習了繼承就清楚了
利用這個特色,咱們就能夠實現,定義一個類,這個類不能直接用來建立實例,只能經過繼承它的子類來實例化
父類就會有異常