1. ホーム
  2. javascript

[解決済み] オブジェクトリテラルとコンストラクタ関数のどちらを使うべきですか?

2023-01-05 21:44:03

質問

javascriptでオブジェクトを作成する際に、どちらの方法で作成すればよいのかわからなくなってきました。少なくとも2つの方法があるようです。1つはオブジェクトリテラル記法を使用することで、もう1つは構築関数を使用することです。どちらか一方に利点があるのでしょうか?

どのように解決するのですか?

オブジェクトに関連する振る舞いがない場合(つまり、オブジェクトがデータ/状態の単なるコンテナである場合)、オブジェクトリテラルを使用します。

var data = {
    foo: 42,
    bar: 43
};

を適用する。 KISSの原則 . もし、データの単純なコンテナ以上のものが必要でなければ、単純なリテラルを使用しましょう。

オブジェクトに動作を追加したい場合は、コンストラクタを使用し、構築中にオブジェクトにメソッドを追加するか、クラスにプロトタイプを与えることができます。

function MyData(foo, bar) {
    this.foo = foo;
    this.bar = bar;

    this.verify = function () {
        return this.foo === this.bar;
    };
}

// or:
MyData.prototype.verify = function () {
    return this.foo === this.bar;
};

このようなクラスは、データオブジェクトのスキーマのような役割も果たします。オブジェクトがどのようなプロパティを初期化し、どのようなプロパティを含むか、(コンストラクタを通じて)ある種の契約を結んでいることになります。自由なリテラルは、データの無定形なブロブに過ぎません。

あなたは外部の verify 関数を使用したほうがよいでしょう。

var data = {
    foo: 42,
    bar: 43
};

function verify(data) {
    return data.foo === data.bar;
}

しかし、これはカプセル化に関しては好ましいことではありません。理想的には、エンティティに関連するすべてのデータ+振る舞いが一緒に住むべきです。