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

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

如何理解es6中的class,以及class中的constructor函數

如何理解es6中的class,以及class中的constructor函數

開滿天機 2018-10-09 13:15:41
看了一些書,書中說JavaScript沒有類的概念,后來es6中引入class語法,但是并沒有充分理解class,很多人說這只是一個語法糖,沒能很好的解決面向對象的問題。在構建react的時候有如下寫法class Tabs extend Component{constructor(props){     super(props) }}請同時解釋一下super的意思
查看完整描述

1 回答

?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

首先,“語法糖”的意思是現有技術本可以實現,但是采用某種寫法會更加簡潔優雅。最常見的就是聲明對象采用的就是語法糖 var a={b:111}
ES6的class可以看作只是一個語法糖,它的絕大部分功能,ES5都可以做到,新的class寫法只是讓對象原型的寫法更加清晰、更像面向對象編程的語法而已。

function Point(x, y) {  this.x = x;  this.y = y;
}

Point.prototype.toString = function () {  return '(' + this.x + ', ' + this.y + ')';
};

等同于

class Point {  constructor(x, y) {    this.x = x;    this.y = y;
  }

  toString() {    return '(' + this.x + ', ' + this.y + ')';
  }
}

在constructor中必須調用 super方法,子類沒有自己的this對象,而是繼承父類的this對象,然后對其進行加工。super代表了父類構造函數。對于你的實例相當于執行Component(props)。但是注意,此處this指向 子類。更嚴謹的是相當于

Component.prototype.constructor.call(this,props)。

至于為什么一定要有super?可以很容易想得到,先有父才有子嘛。super繼承父類屬性,在constructor中進行自己的改造。


查看完整回答
反對 回復 2018-11-19
  • 1 回答
  • 0 關注
  • 830 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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