亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么有必要設置原型構造函數?

為什么有必要設置原型構造函數?

MMTTMM 2019-06-18 13:47:06
為什么有必要設置原型構造函數?在MDN文章中有關繼承的一節面向對象Javascript簡介,我注意到他們設置了原型.構造函數:// correct the constructor pointer because it points to PersonStudent.prototype.constructor = Student;這有什么重要的用途嗎?可以省略嗎?
查看完整描述

3 回答

?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

這有什么重要的用途嗎?

是和不是。

在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..所以這是誤導。當然,如果您正在子類使用它(比如PromiseArray)和不使用class(為您處理此問題),您需要確保設置正確。所以基本上:這是個好主意。

如果您的代碼(或您使用的庫代碼)中沒有任何東西使用它,這是可以的。我一直確保它的連線正確。

當然,還有ES 2015(又名ES6)class關鍵字,大多數時候我們都會使用它,我們不必再使用它了,因為當我們使用它的時候,它就會為我們處理。

class Student extends Person {}

“.如果您正在子類使用它的東西(比如PromiseArray)和不使用class..."-它是.可能這樣做,但這是一個真正的痛苦(有點傻)。你必須用Reflect.construct.


查看完整回答
反對 回復 2019-06-18
  • 3 回答
  • 0 關注
  • 400 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號