25

目的

JavaScript ECMA6 でコンストラクターのオーバーロードを許可するメカニズムを実装する

これが重複していない理由

トピックJavaScript ES6 がマルチコンストラクター クラスをサポートしないのはなぜですか? 、類似はこれと同じではありませんが。もう 1 つのトピックは、古いECMAScript バージョンを使用したコンストラクターのオーバーロードにのみ焦点を当てていますが、このトピックは ECMA6 に焦点を当てています。最新の回答をお探しの場合は、ここが最適です。

バックグラウンド

特定のコンストラクターを持つ JavaScript クラスがあり、ユーザーがオブジェクトをインスタンス化するときにさまざまなコンストラクターを使用できるようにしたいと考えています。私がふりをするものの例は次のとおりです。

const DEFAULT_WHEEL_NUMBER = 4;
const DEFAULT_COLOR = "black";    
const DEFAULT_NAME = "myCar";

class Car{

    constructor(numberWheels, aName, aColor){
        this.wheelsNum = numberWheels;
        this.name = aName;
        this.color = aColor;
    }

    constructor(aName){
        this(DEFUALT_WHEEL_NUMBER, aName, DEFAULT_COLOR);
    }

    constructor(){
        this(DEFUALT_WHEEL_NUMBER, DEFAULT_NAME, DEFAULT_COLOR);
    }
}

このコードでは、ユーザーが使用できる 3 つのコンストラクターがあり、それぞれが異なる量のパラメーターを受け取ります。使用例は次のとおりです。

var car1 = new Car(3, "tricicle-car", "white");
var car2 = new Car("Opel"); //creates black car with 4 wheels called Opel
var car3 = new Car(); //creates a black car, with 4 wheels called myCar

問題

Java または C# を使用している場合、これらの言語にはコンストラクターのオーバーロードがあるため、これは簡単な例です。

ただし、MDNのクラスに関するドキュメントから、JavaScript はそうではないと結論付けることができます。

質問

  1. ECMA6 を使用して JavaScript クラスに同様のメカニズムを実装する方法はありますか? そうでない場合、最良/最も近い代替手段は何ですか?
4

2 に答える 2

18

JavaScript には、これに対する組み込みのソリューションはありません。別の解決策として、オブジェクトを使用するargumentsか (場合によっては)、次のように独自の構成オプションを渡すことができます。

const defaults = {
    numberWheels: 4,
    color: "black",   
    name: "myCar"
}

class Car {
    constructor(options) {
         this.wheelsNum = options.numberWheels || defaults.numberWheels;
         this.name = options.name || defaults.name;
         this.color = options.color || defaults.color;
    }
}

これは基本的に古い学校のソリューションです。私は ES3 でも同じロジックを使用しています。

于 2016-07-07T08:30:24.473 に答える