JavaScript | 第12章「オブジェクトに関する扱い方」

javascrpit JavaScript
スポンサーリンク

では MDN の「“オブジェクトに関する扱い方”(Working with objects)」の内容を、初心者にもわかるように、具体的なコードと図解イメージを交えながら丁寧に解説していきます。

JavaScriptオブジェクト入門:基礎から実践まで


1. オブジェクトとは?

オブジェクトとは、「名前(キー)と値(バリュー)のセット」をまとめた箱のようなものです。
たとえば、「人」を表すとき、名前や年齢などの情報を1つにまとめられます。

const person = {
  name: "Alice",
  age: 25,
  job: "Designer"
};
JavaScript

図で表すと:

person
 ├─ name → "Alice"
 ├─ age  → 25
 └─ job  → "Designer"

2. プロパティへのアクセス

オブジェクトの中身は、2通りの書き方で取り出せます。

● ドット記法(.

console.log(person.name); // "Alice"
person.age = 26;          // 値を更新
JavaScript

● 角かっこ記法([]

console.log(person["job"]); // "Designer"
const key = "name";
console.log(person[key]);   // "Alice"(変数でアクセスできる)
JavaScript

📘 ポイント

  • person.name は固定のキー名を使うとき
  • person[key] はキーを変数で指定したいときに便利

3. プロパティの追加・削除

person.country = "Japan"; // 追加
delete person.job;        // 削除
console.log(person);
JavaScript

結果:

{
  name: "Alice",
  age: 26,
  country: "Japan"
}
JavaScript

4. オブジェクトの中にオブジェクトを入れる(ネスト)

const user = {
  name: "Bob",
  contact: {
    email: "bob@example.com",
    phone: "080-1234-5678"
  }
};
JavaScript

アクセス方法:

console.log(user.contact.email); // "bob@example.com"
JavaScript

5. メソッド(関数をプロパティにする)

関数をオブジェクトに入れると、「メソッド」と呼びます。

const dog = {
  name: "Pochi",
  bark: function() {
    console.log("ワン!ワン!");
  }
};

dog.bark(); // "ワン!ワン!"
JavaScript

短く書くとこう👇(ES6記法)

const cat = {
  name: "Tama",
  meow() {
    console.log("ニャー!");
  }
};
cat.meow();
JavaScript

6. this の仕組み

this は「そのメソッドを呼び出しているオブジェクト自身」を指します。

const user = {
  name: "Charlie",
  sayHi() {
    console.log(`こんにちは、${this.name}です!`);
  }
};

user.sayHi(); // "こんにちは、Charlieです!"
JavaScript

🔍 図で考えると:

user ----> sayHi() 内の this は user を指す

🧠 注意!

const hi = user.sayHi;
hi(); // "こんにちは、undefinedです!"
JavaScript

この場合、this は「user」を失い、undefined になります。
(関数単体で呼ぶと、どのオブジェクトにも属していないからです)

解決法:

hi.call(user); // "こんにちは、Charlieです!"
JavaScript

7. コンストラクタ関数(オブジェクトを量産)

同じ形のオブジェクトをたくさん作りたいときは、関数でテンプレートを作ります。

function Person(name, age) {
  this.name = name;
  this.age = age;
  this.sayHello = function() {
    console.log(`こんにちは、${this.name}です`);
  };
}

const p1 = new Person("Alice", 25);
const p2 = new Person("Bob", 30);

p1.sayHello(); // こんにちは、Aliceです
p2.sayHello(); // こんにちは、Bobです
JavaScript

🔹 new をつけると:

  1. 空のオブジェクト {} が作られる
  2. this がそのオブジェクトを指す
  3. 最後に自動で this が返される

8. Object.create()(プロトタイプを使う)

Object.create() は、別のオブジェクトを“親”として新しいオブジェクトを作ります。

const animal = {
  eat() {
    console.log("食べています");
  }
};

const rabbit = Object.create(animal);
rabbit.jump = function() {
  console.log("ピョン!");
};

rabbit.eat();  // 親のメソッドを継承して使える
rabbit.jump(); // 自分のメソッド
JavaScript

9. ゲッターとセッター(自動で処理されるプロパティ)

プロパティにアクセスしたときに、自動で関数を呼ぶ仕組みです。

const account = {
  _balance: 1000,

  get balance() {
    console.log("残高を確認しました");
    return this._balance;
  },

  set balance(value) {
    console.log(`残高を ${value} に更新します`);
    this._balance = value;
  }
};

console.log(account.balance); // 残高を確認しました → 1000
account.balance = 500;        // 残高を 500 に更新します
console.log(account.balance); // 500
JavaScript

📘 使いどころ:

  • 値の検証
  • ログ出力
  • 計算された値を返すプロパティ(例:税金計算など)

10. オブジェクトの比較

const a = { value: 10 };
const b = { value: 10 };
const c = a;

console.log(a === b); // false(中身が同じでも別物)
console.log(a === c); // true(同じオブジェクト)
JavaScript

🔍 比較の基準は「中身」ではなく「参照先(メモリアドレス)」です。
同じオブジェクトを指していなければ別物になります。

11. おまけ:スプレッド構文でコピーする

const original = { x: 1, y: 2 };
const copy = { ...original, z: 3 };

console.log(copy); // { x: 1, y: 2, z: 3 }
JavaScript

{ ...original } は「浅いコピー(shallow copy)」なので、ネストしたオブジェクトは共有される点に注意!

まとめ表

機能使い方よく使う場面
オブジェクトリテラル{ name: "Alice" }一時的・簡単な構造
メソッドobj.method = function() {}動きを持たせる
thisthis.nameメソッド内で自分を参照
コンストラクタnew Person()同じ構造を量産
Object.create()継承用プロトタイプ継承
getter/setterget prop() {...}自動処理・バリデーション
deletedelete obj.key不要プロパティ削除

タイトルとURLをコピーしました