es6 生成類的例項物件的寫法,與 es5 完全一樣,也是使用new
命令。前面說過,如果忘記加上new
,像函式那樣呼叫class
,將會報錯。
與 es5 一樣,例項的屬性除非顯式定義在其本身(即定義在class
point
// 報錯
var
point
=point(2
,3);
// 正確
var
point
=new
point(2
,3);
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
x
和y
都是例項物件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
p1
和p2
都是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.我們先用建構函...