1. ホーム
  2. javascript

[解決済み] JavaScriptでオブジェクトを作成する場合、どの方法が一番良いですか?オブジェクトのプロパティの前に `var` は必要ですか?

2022-04-20 02:36:24

質問

これまで、JavaScriptでオブジェクトを作成する3つの方法について見てきました。どの方法がオブジェクトを作成するのに最適なのか、またその理由は?

また、これらの例のすべてで、キーワード var がプロパティの前に使われていないのはなぜですか?なぜでしょうか? var プロパティは変数であると書かれているように、プロパティ名の前に?

2つ目と3つ目の方法では、オブジェクトの名前は大文字ですが、1つ目の方法では、オブジェクトの名前は小文字になっています。オブジェクトの名前には、どのようなケースを使用すればよいのでしょうか?

最初の方法

function person(fname, lname, age, eyecolor){
  this.firstname = fname;
  this.lastname = lname;
  this.age = age;
  this.eyecolor = eyecolor;
}

myFather = new person("John", "Doe", 50, "blue");
document.write(myFather.firstname + " is " + myFather.age + " years old.");

第2の方法

var Robot = {
  metal: "Titanium",
  killAllHumans: function(){
    alert("Exterminate!");
  }
};

Robot.killAllHumans();

第三の方法 - 配列構文を使用したJavaScriptオブジェクト。

var NewObject = {};

NewObject['property1'] = value;
NewObject['property2'] = value;
NewObject['method'] = function(){ /* function code here */ }

解決方法は?

はありません。 ベスト の方法は、あなたのユースケースに依存します。

  • 使用方法 方法1 は、類似のオブジェクトを複数作成する場合です。あなたの例では Person (名前は大文字で始める必要があります)を コンストラクタ機能 . これは、以下のものと似ています。 クラス 他のOO言語では
  • 使用方法 方法2 のみ必要な場合は 1つのオブジェクト のようなものです(シングルトン)。もしこのオブジェクトを別のオブジェクトから継承させたい場合は、コンストラクタ関数を使用する必要があります。
  • 使用方法 方法3 オブジェクトの他のプロパティに応じてプロパティを初期化したい場合、または動的なプロパティ名を持つ場合。

更新します。 要望のあった第3の方法の例です。

依存性のあるプロパティ。

として機能しません。 this ではない を参照してください。 book . オブジェクトリテラル内の他のプロパティの値でプロパティを初期化する方法はありません。

var book = {
    price: somePrice * discount,
    pages: 500,
    pricePerPage: this.price / this.pages
};

の代わりに、こうすることができます。

var book = {
    price: somePrice * discount,
    pages: 500
};
book.pricePerPage = book.price / book.pages;
// or book['pricePerPage'] = book.price / book.pages;

動的なプロパティ名です。

プロパティ名が何らかの変数に格納されているか、何らかの式で生成されている場合は、ブラケット記法を使用する必要があります。

var name = 'propertyName';

// the property will be `name`, not `propertyName`
var obj = {
    name: 42
}; 

// same here
obj.name = 42;

// this works, it will set `propertyName`
obj[name] = 42;