es6 Class 的例項物件

2021-08-15 07:22:56 字數 2882 閱讀 2676

es6 生成類的例項物件的寫法,與 es5 完全一樣,也是使用new命令。前面說過,如果忘記加上new,像函式那樣呼叫class,將會報錯。

class

point

// 報錯

var

point

=point(2

,3);

// 正確

var

point

=new

point(2

,3);

與 es5 一樣,例項的屬性除非顯式定義在其本身(即定義在this物件上),否則都是定義在原型上(即定義在class上)。

//定義類

class

point

tostring

()

}

var

point

=new

point(2

,3);

point

.tostring

()// (2, 3)

point

.hasownproperty

('x'

)// true

point

.hasownproperty

('y'

)// true

point

.hasownproperty

('tostring'

)// false

point

.__proto__

.hasownproperty

('tostring'

)// true

上面**中,xy都是例項物件point自身的屬性(因為定義在this變數上),所以hasownproperty方法返回true,而tostring是原型物件的屬性(因為定義在point類上),所以hasownproperty方法返回false。這些都與 es5 的行為保持一致。

與 es5 一樣,類的所有例項共享乙個原型物件。

var

p1 =

newpoint(2

,3);

var

p2 =

newpoint(3

,2);

p1

.__proto__

===p2

.__proto__

//true

上面**中,p1p2都是point的例項,它們的原型都是point.prototype,所以__proto__屬性是相等的。

這也意味著,可以通過例項的__proto__屬性為「類」新增方法。

__proto__並不是語言本身的特性,這是各大廠商具體實現時新增的私有屬性,雖然目前很多現代瀏覽器的 js 引擎中都提供了這個私有屬性,但依舊不建議在生產中使用該屬性,避免對環境產生依賴。生產環境中,我們可以使用object.getprototypeof方法來獲取例項物件的原型,然後再來為原型新增方法/屬性。

var

p1 =

newpoint(2

,3);

var

p2 =

newpoint(3

,2);

p1

.__proto__

.printname

=function

();

p1

.printname

()// "oops"

p2

.printname

()// "oops"

var

p3 =

newpoint(4

,2);

p3

.printname

()// "oops"

上面**在p1的原型上新增了乙個printname方法,由於p1的原型就是p2的原型,因此p2也可以呼叫這個方法。而且,此後新建的例項p3也可以呼叫這個方法。這意味著,使用例項的__proto__屬性改寫原型,必須相當謹慎,不推薦使用,因為這會改變「類」的原始定義,影響到所有例項。

ES6 Class語法介紹

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

簡單理解 es6 class

類即物件 es6 除錯最簡單的方法 直接在node控制台執行js,完全不需要考慮瀏覽器相容性而去安裝babel等編譯器的去編譯後再除錯 先舉個例子 class a start 複製 乙個類就這麼產生了,只要new一下,這個類就可以被用了 let b new a 複製 可能這個類將會有很多地方要使用,...

ES6 Class基本用法

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