這有什么重要的用途嗎?
是和不是。
在ES5和更早版本中,JavaScript本身沒有使用constructor
為了任何事。它定義了函數的默認對象prototype
屬性,并且它將引用該函數,并且就這樣..說明書中沒有任何其他內容提到它。
這在ES 2015(ES6)中發生了變化,它開始在繼承層次結構中使用它。例如,Promise#then
使用constructor
你對它的承諾的屬性(通過物種構造)在建立新的回報承諾的時候。它還涉及到子類型數組(通過ArraySpeciesCreate).
在語言本身之外,有時人們在試圖構建通用的“克隆”函數時會使用它,或者只是當他們想要引用他們認為是對象的構造函數的時候。我的經驗是,使用它是罕見的,但有時人們確實使用它。
可以省略嗎?
默認情況下,您只需要將它放回取代函數上的對象prototype
財產:
Student.prototype = Object.create(Person.prototype);
如果你不這么做
Student.prototype.constructor = Student;
.那么Student.prototype.constructor
繼承自Person.prototype
(大概)constructor = Person
..所以這是誤導。當然,如果您正在子類使用它(比如Promise
或Array
)和不使用class
(為您處理此問題),您需要確保設置正確。所以基本上:這是個好主意。
如果您的代碼(或您使用的庫代碼)中沒有任何東西使用它,這是可以的。我一直確保它的連線正確。
當然,還有ES 2015(又名ES6)class
關鍵字,大多數時候我們都會使用它,我們不必再使用它了,因為當我們使用它的時候,它就會為我們處理。
class Student extends Person {}
1 “.如果您正在子類使用它的東西(比如Promise
或Array
)和不使用class
..."-它是.可能這樣做,但這是一個真正的痛苦(有點傻)。你必須用Reflect.construct
.