classのsuper
1919 ワード
前言
起因以前はプロジェクトでclassを使用していたが、継承には使用されず、クラスを直接宣言し、使用した場合、
通過する前に複数の機能があり、boxクラスに書かれており、プロジェクトの入り口はboxにあります.現在boxからベースクラスlib、ビジネスエントリビジネス、さらに細分化されたビジネスモジュールbusiness-xxが抽出されています.プロジェクトエントリはビジネスに変更され、ビジネスはlibを継承し、ビジネスs-xxを導入し、ビジネス-xxをインスタンス化します.コードは次のとおりです.
しかし、残念ながら、
そしてやはりエラーですが、今回は構文エラーではなく、コード付与エラーです.親クラスの構造方法ではパラメータが必要ですから.考えてみると、
結果コードは次のとおりです.
このように、プロジェクトの開始時に
締めくくりは、
super
は何ですか.多くの人が、オブジェクト向けの開発経験がなければ、よく分からないかもしれません.私も含めて.起因以前はプロジェクトでclassを使用していたが、継承には使用されず、クラスを直接宣言し、使用した場合、
new
のインスタンスがあり、簡単だったが、論理ははっきりしていなかった.今日は、基礎機能を抽出してベースクラスにし、ビジネスロジックが基礎機能を継承する考えがあります.これには2つのメリットがあります.1つは、インフラストラクチャが複数のプロジェクトに共通して作成できることであり、もう1つは、ビジネスの分割を容易にすることです.実は結局、デカップリングです.通過する前に複数の機能があり、boxクラスに書かれており、プロジェクトの入り口はboxにあります.現在boxからベースクラスlib、ビジネスエントリビジネス、さらに細分化されたビジネスモジュールbusiness-xxが抽出されています.プロジェクトエントリはビジネスに変更され、ビジネスはlibを継承し、ビジネスs-xxを導入し、ビジネス-xxをインスタンス化します.コードは次のとおりです.
import Rail from './rail'
class Business extends Lib {
constructor(){
this.rail = new Rail(this)
}
}
しかし、残念ながら、
this hasn't been initialised - super() hasn't been called
と間違えました.これは私がsuperを実行していないということですか.検索すると、これは親を呼び出す構造方法で、コードを1行追加しました.super()
そしてやはりエラーですが、今回は構文エラーではなく、コード付与エラーです.親クラスの構造方法ではパラメータが必要ですから.考えてみると、
super
にいくつかのパラメータが渡され、親のコンストラクション関数コンソールが印刷され、やはりsuper
のパラメータです.superは確かに親クラスを呼び出す構造方法であり,パラメータを渡すことができることは明らかである.結果コードは次のとおりです.
import Rail from './rail'
class Business extends Lib {
constructor(control){
super(control)
this.rail = new Rail(this)
}
}
このように、プロジェクトの開始時に
Business
をインスタンス化すれば、rail
のような対応する機能を登録することができる.また、後で機能を追加する必要がある場合は、rail
のように1回登録すればよい.Business
はLib
から継承され、Business
はまたビジネスモジュール内部に伝達されるので、ビジネスモジュール内部ではLib
の方法と属性を完全に取得することができる.control
は、大きなモジュールBusiness
全体と外部モジュールとの通信の橋渡しである.締めくくりは、
rail
のような各ビジネスサブモジュールが、Lib
から直接継承され、Business
にもインスタンス化されることを考えたことがある.これでもっと似合うのではないでしょうか.しかし、その後、このような考えを否決した.結局、異なるサブビジネスモジュールの間にも通信の需要があり、独立しすぎると、通信も面倒になる.すべてのサブモジュールがBusiness
にマウントされているほうが、通信が便利です.モジュール化には、一定の限界があるでしょう.