1

私はいくつかのjavascriptクラスを持っており、コンストラクターのパラメーターをチェックするsomeClass初期化関数を持っています。initこのパラメータを持つオブジェクトはかなり大きく、この関数は大きくなりすぎました。

function SomeClass (paramObj) {
    this.inputHourId;
    this.inputHourName;
    this.inputHourValue;
    ......
    ......
    this.Init = function (paramObj) {
        if (typeof paramObj.hourOptions.inputName == "undefined") {
            this.inputHourName = "default_name";
        } else {
            this.inputHourName = paramObj.hourOptions.inputName;
        }

        if (typeof paramObj.hourOptions.inputValue == "undefined") {
            this.inputHourValue = "default_value";
        } else {
            this.inputHourValue = paramObj.hourOptions.inputValue;
        }
        ......
        ......
        ......
    }
    this.Init(paramObj);
}

コードの重複を避けて読みやすくするために、チェックを使用して変数の初期化を行う関数を作成することにしました。

this.initVar = function (veriable, value) {
    if (typeof value == "undefined") {
        veriable = "some_default_value";
    } else {
        veriable = val;
    }
}

関数を追加initVarすると、私のInit関数は次のようになります。

this.Init = function(paramObj){//入力時間の初期化this.initVar(this.inputHourId、paramObj.hourOptions.inputId); this.initVar(this.inputHourName、paramObj.hourOptions.inputName); this.initVar(this.inputHourValue、paramObj.hourOptions.inputValue); .... ........}

しかし、その後もクラス変数this.inputHourNameはまだですundefined

さて、質問です。関数を使用してクラスプロパティを初期化するにはどうすればよいですか?または、関数パラメータのようなクラスプロパティを送信するにはどうすればよいですか?

4

3 に答える 3

2

これは、変数を渡すthis.inputHourIdinitVar()、更新時に変数のコピーが作成されるためです。それはあなたが望むものではありません。

これに書き直すことができinitVar()ます。変数自体ではなく、変数の名前を文字列として使用します。次にthis[variable]、実際のインスタンス変数を更新するために使用します。

this.initVar = function (variable, value) {
    if (typeof value == "undefined") {
        this[variable] = "some_default_value";
    } else {
        this[variable] = val;
    }
}

次に、次のように呼び出します。

this.initVar('inputHourId', paramObj.hourOptions.inputId);
于 2013-01-22T15:15:01.967 に答える
1

また、一連の ifs の代わりにこの構文を使用できます。

this.param1 = params.param1 || "default_value";

于 2013-01-22T15:13:20.367 に答える
0

関数を使用してクラス プロパティを初期化するにはどうすればよいですか?

割り当てたいプロパティの参照を関数に渡すことはできないため、関数から値を返し、結果をプロパティに割り当てます。

this.inputHourId = initVar(paramObj.hourOptions.inputId);
于 2013-01-22T15:14:44.607 に答える