classのsuper

1919 ワード

前言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回登録すればよい.BusinessLibから継承され、Businessはまたビジネスモジュール内部に伝達されるので、ビジネスモジュール内部ではLibの方法と属性を完全に取得することができる.controlは、大きなモジュールBusiness全体と外部モジュールとの通信の橋渡しである.
締めくくりは、railのような各ビジネスサブモジュールが、Libから直接継承され、Businessにもインスタンス化されることを考えたことがある.これでもっと似合うのではないでしょうか.しかし、その後、このような考えを否決した.結局、異なるサブビジネスモジュールの間にも通信の需要があり、独立しすぎると、通信も面倒になる.すべてのサブモジュールがBusinessにマウントされているほうが、通信が便利です.モジュール化には、一定の限界があるでしょう.