オブジェクトリテラルとコンストラクター関数:オブジェクト作成の2つの方法

2024-04-02

JavaScript オブジェクト:プログラミングの基礎を築く鍵

オブジェクトとは?

オブジェクトは、プロパティメソッド の集まりです。

  • プロパティ は、名前と値のペアで構成されます。名前は文字列で、値は数値、文字列、配列、関数など、さまざまなデータ型を持つことができます。
  • メソッド は、オブジェクトが実行できるアクションです。関数のように動作し、引数を受け取り、値を返すことができます。

オブジェクトは、現実世界のさまざまなものをモデル化するために使用できます。例えば、以下のようなオブジェクトを作成できます。

  • ユーザー オブジェクト:名前、年齢、メールアドレスなどのプロパティを持つ
  • 商品 オブジェクト:名前、価格、説明などのプロパティを持つ
  • ショッピングカート オブジェクト:商品リスト、合計金額などのプロパティと、商品を追加/削除するメソッドを持つ

オブジェクトの作成

オブジェクトは、オブジェクトリテラル または コンストラクター関数 を使用して作成できます。

1 オブジェクトリテラル

オブジェクトリテラルは、最も簡単なオブジェクト作成方法です。波括記号 {} を使用して、プロパティと値のペアをカンマで区切って記述します。

const person = {
  name: "山田 太郎",
  age: 30,
  email: "[email protected]",
};

console.log(person.name); // "山田 太郎"
console.log(person.age); // 30

2 コンストラクター関数

コンストラクター関数は、オブジェクトを作成するためのテンプレートです。関数名は大文字で始め、new 演算子を使用して呼び出す必要があります。

function Person(name, age, email) {
  this.name = name;
  this.age = age;
  this.email = email;
}

const person1 = new Person("山田 太郎", 30, "[email protected]");
const person2 = new Person("佐藤 花子", 25, "[email protected]");

console.log(person1.name); // "山田 太郎"
console.log(person2.age); // 25

オブジェクトのプロパティにアクセスするには、ドット記法またはブラケット記法を使用します。

  • ドット記法:プロパティ名の前にドット . を付けてアクセスします。
  • ブラケット記法:プロパティ名を文字列として括弧 [] で囲んでアクセスします。
const person = {
  name: "山田 太郎",
  age: 30,
};

console.log(person.name); // "山田 太郎"
console.log(person["age"]); // 30

オブジェクトのメソッドを呼び出すには、ドット記法の後に括弧 () を付けて、必要に応じて引数を渡します。

const person = {
  name: "山田 太郎",
  age: 30,
  greet() {
    console.log(`こんにちは、私の名前は ${this.name} です。`);
  },
};

person.greet(); // こんにちは、私の名前は 山田 太郎 です。

プロトタイプと継承

JavaScript オブジェクトは、プロトタイプ という仕組みによって、他のオブジェクトからプロパティやメソッドを継承することができます。

  • プロトタイプ は、オブジェクトの基盤となるオブジェクトです。
  • 継承 は、子オブジェクトが親オブジェクトのプロパティやメソッドを引き継ぐことです。
const person = {
  name: "山田 太郎",
  age: 30,
};

const student = {
  grade: "A",
};

// student オブジェクトは person オブジェクトをプロトタイプとして持つ
student.__proto__ = person;

console.log(student.name); // "山田 太郎"
console.log(student.grade); // "A"

クラスとオブジェクト指向プログラミング

クラス は、オブジェクト指向プログラミング (OOP) の重要な概念です。クラスは、オブジェクトのテンプレートであり、共通のプロパティやメソッドを持つオブジェクトを生成するために使用されます



JavaScript オブジェクト サンプルコード

// ユーザーオブジェクト
const user = {
  name: "山田 太郎",
  age: 30,
  email: "[email protected]",
  // メソッド
  greet() {
    console.log(`こんにちは、私の名前は ${this.name} です。`);
  },
};

console.log(user.name); // "山田 太郎"
user.greet(); // こんにちは、私の名前は 山田 太郎 です。

// 商品オブジェクト
const product = {
  name: "Tシャツ",
  price: 1000,
  description: "綿100%の快適なTシャツ",
  // メソッド
  getDiscountPrice(discount) {
    return this.price * (1 - discount);
  },
};

console.log(product.name); // "Tシャツ"
const discountPrice = product.getDiscountPrice(0.1); // 900
console.log(`割引価格: ${discountPrice}円`); // 割引価格: 900円

コンストラクター関数

// Person コンストラクター関数
function Person(name, age, email) {
  this.name = name;
  this.age = age;
  this.email = email;
  // メソッド
  this.greet = function() {
    console.log(`こんにちは、私の名前は ${this.name} です。`);
  };
}

// Person オブジェクトの生成
const person1 = new Person("山田 太郎", 30, "[email protected]");
const person2 = new Person("佐藤 花子", 25, "[email protected]");

console.log(person1.name); // "山田 太郎"
person1.greet(); // こんにちは、私の名前は 山田 太郎 です。
console.log(person2.email); // "[email protected]"

// サブクラス:Employee
function Employee(name, age, email, department) {
  Person.call(this, name, age, email); // Person コンストラクターを呼び出す
  this.department = department;
}

// Employee オブジェクトの生成
const employee = new Employee("田中


JavaScript オブジェクトを作成する他の方法

Object.create() メソッドは、指定されたプロトタイプオブジェクトを持つ新しいオブジェクトを作成します。

const personPrototype = {
  greet() {
    console.log(`こんにちは、私の名前は ${this.name} です。`);
  },
};

const person1 = Object.create(personPrototype);
person1.name = "山田 太郎";

console.log(person1.name); // "山田 太郎"
person1.greet(); // こんにちは、私の名前は 山田 太郎 です。

const person2 = Object.create(personPrototype, {
  age: {
    value: 30,
    writable: true,
  },
});
person2.name = "佐藤 花子";

console.log(person2.name); // "佐藤 花子"
console.log(person2.age); // 30

Object.assign() メソッドは、ターゲットオブジェクトにソースオブジェクトのプロパティをコピーします。

const source = {
  name: "山田 太郎",
  age: 30,
};

const target = {};

Object.assign(target, source);

console.log(target.name); // "山田 太郎"
console.log(target.age); // 30

const person = {
  name: "佐藤 花子",
};

Object.assign(person, source);

console.log(person.name); // "佐藤 花子"
console.log(person.age); // 30

スプレッド構文は、オブジェクトリテラルや配列の要素を展開するために使用できます。

const person = {
  name: "山田 太郎",
  age: 30,
};

const



JavaScriptの Object.getOwnPropertyDescriptors メソッドのサンプルコード

このメソッドは、オブジェクトの独自プロパティのみを検査します。つまり、プロトタイプチェーンから継承されたプロパティは含まれません。メソッドの戻り値は、オブジェクトであり、各プロパティ名がキー、そのプロパティ記述子が値となります。プロパティ記述子は、以下のプロパティを持つオブジェクトです。



JavaScript RegExp.lastParen を使いこなす:複雑なパターンマッチングをマスター

概要RegExp オブジェクトの静的プロパティ最後に一致した部分文字列のうち、最も外側の括弧で囲まれた部分を取得別名: RegExp["+"]∗使用例:∗複雑なパターンマッチングの結果を処理∗抽出した部分文字列を再利用∗マッチング結果の検証∗∗詳細∗∗∗∗∗値∗∗:∗最後に一致した部分文字列のうち、最も外側の括弧で囲まれた部分∗一致がない場合:空文字列∗複数回のマッチング:最後のマッチング結果∗∗∗更新タイミング∗∗:∗RegExpオブジェクト(サブクラスではない)がマッチングに成功するたびに更新∗括弧で囲まれたキャプチャグループが存在する場合のみ更新∗∗∗アクセス方法∗∗:∗RegExp


regExp.global vs while ループ vs matchAll メソッド

regExp. global プロパティは、正規表現オブジェクト (RegExp) の動作に影響を与えるフラグです。このフラグを設定すると、正規表現パターンが 複数回 一致するかどうかが変わります。デフォルト動作デフォルトでは、regExp


regExp.compile と String.prototype メソッドの比較

JavaScript の RegExp オブジェクトは、文字列パターンマッチングを行うための強力なツールです。regExp. compile は、RegExp オブジェクトをより効率的に使用するための便利なメソッドです。regExp. compile は、以下の 2 つの引数を取ります。


JavaScript RegExp オブジェクトの source プロパティ

source プロパティ は、RegExp オブジェクトのプロパティの一つで、正規表現のパターン文字列を取得するために使用されます。例:この例では、regExp という RegExp オブジェクトを作成し、source プロパティを使用して、そのオブジェクトのパターン文字列 "ab+c" を取得しています。



JavaScript で NaN を安全に判定する方法:Number.isNaN を使うべき理由

NaN とはNaN は、「Not a Number」の略で、数値ではないことを表す特別な値です。例えば、以下の式はすべて NaN を返します。Number. isNaN は、引数として渡された値が NaN かどうかを判定します。Number


JavaScriptで String.prototype.sup() メソッドで簡単変換

このメソッドは、引数として表示したい文字列を受け取り、その文字列を <sup> タグと </sup> タグで囲んで返します。以下は、String. prototype. sup() メソッドの例です。この例では、str 変数に "H2O" という文字列を代入し、sup() メソッドを使用してその文字列を上付き文字に変換しています。 変換結果は supText 変数に格納され、コンソールに表示されます。


協定世界時 (UTC)

Date. getUTCMilliseconds()メソッドは、JavaScriptの「Date」オブジェクトにおいて、**協定世界時 (UTC)**におけるミリ秒単位の時刻を取得するために使用されます。ミリ秒は、1秒の1000分の1を指します。


Number.number プロパティを使いこなしてワンランク上の JavaScript 開発者へ

数値リテラルの型を確認するtypeof 演算子を使用して数値リテラルの型を確認すると、常に "number" と返されます。しかし、Number. number プロパティを使用すると、より詳細な型情報を得ることができます。上記のように、Number


JavaScript エラー: 無効な for-in 初期化子 - エラー解決のヒント

初期化子の型for-in ループの初期化子は、オブジェクトである必要があります。オブジェクトリテラル、変数、プロパティへの参照など、オブジェクトを返す式を記述する必要があります。例:初期化子の値初期化子が null または undefined の場合、エラーが発生します。