JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで派生プロパティをオーバーライドする方法をわかりやすく解説

JavaScriptでは、Object.create()メソッドを使うことで、既存のオブジェクトをプロトタイプとして持つ新しいオブジェクト(派生オブジェクト)を作成できます。派生オブジェクトはプロトタイプのプロパティをそのまま継承しますが、同名のプロパティに新しい値を代入することで、継承された値を簡単に上書き(オーバーライド)できます。

以下は、JavaScriptで派生プロパティをオーバーライドする具体的なコード例です。

サンプルコード

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
   body {
      font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
   }
   .result,
   .sample {
      font-size: 18px;
      font-weight: 500;
      color: rebeccapurple;
   }
   .result {
      color: red;
   }
</style>
</head>
<body>
<h1>Override derived properties</h1>
<div class="sample">Before overriding <br /></div>
<br />
<div class="result">After overriding <br /></div>
<br />
<button class="Btn">CLICK HERE</button>
<h3>Click on the above button to override the above properties</h3>
<script>
   let sampleEle = document.querySelector(".sample");
   let resEle = document.querySelector(".result");
   let BtnEle = document.querySelector(".Btn");
   let objPerson = {name: "Rahul",age: 12,class: 7};
   let Person1 = Object.create(objPerson);
   sampleEle.innerHTML += "Person1.name = " + Person1.name + "<br>";
   sampleEle.innerHTML += "Person1.age = " + Person1.age + "<br>";
   sampleEle.innerHTML += "Person1.class = " + Person1.class + "<br>";
   BtnEle.addEventListener("click", () => {
      Person1.name = "Shawn";
      Person1.age = 18;
      Person1.class = 12;
      resEle.innerHTML += "Person1.name = " + Person1.name + "<br>";
      resEle.innerHTML += "Person1.age = " + Person1.age + "<br>";
      resEle.innerHTML += "Person1.class = " + Person1.class + "<br>";
   });
</script>
</body>
</html>

実行結果

ページを開いた直後の表示は次のようになります。

JavaScriptで派生プロパティをオーバーライドする方法をわかりやすく解説

「CLICK HERE」ボタンをクリックすると −

JavaScriptで派生プロパティをオーバーライドする方法をわかりやすく解説

コードの解説

  • Object.create(objPerson) によって、objPerson をプロトタイプとする新しいオブジェクト Person1 を生成しています。
  • ボタンをクリックする前は、Person1.namePerson1.agePerson1.class はいずれもプロトタイプから継承された値("Rahul"、12、7)を返します。この状態が「オーバーライド前」の表示です。
  • ボタンクリック時には、Person1 自身に対して nameageclass の各プロパティが新たに定義され、プロトタイプ側の同名プロパティが隠されます(これを「シャドーイング」と呼びます)。そのため、表示される値が "Shawn"、18、12 へと切り替わります。

このように、派生オブジェクトのプロパティへ直接代入するだけで、継承元のプロトタイプを変更することなく値を上書きできるのがポイントです。元の objPerson オブジェクト自体は影響を受けません。

  1. JavaScriptでプロパティにアクセスする3つの方法|ドット記法・角括弧・分割代入の使い分け

    JavaScriptでオブジェクトのプロパティにアクセスする3つの方法 JavaScriptには、オブジェクトが持つプロパティ(キーと値のペア)を参照するための方法が主に3つあります。どれも同じ値を取得できますが、それぞれ特徴や向いている場面が異なるため、正しく使い分けられるとコードの可読性と保守性が大きく向上します。 ドット記法:object.property 角括弧記法:object[property] 分割代入:let {property} = object 1. ドット記法(object.property) 最もシンプルで読みやすい記法です。obj.a のようにピリオドでつなぐだけ

  2. JavaScriptでプロパティを共有する方法 ― prototype活用のコード例と解説

    JavaScriptでは、オブジェクトのprototypeプロパティに値を追加することで、プロパティを複数のインスタンス間で共有できます。prototypeに登録されたプロパティは、そのコンストラクタから生成されたすべてのインスタンスから共通して参照されます。 この手法には大きなメリットがあります。各インスタンスごとに同じ値のプロパティを個別に定義する必要がないため、コードの重複を減らし、メモリの使用量も抑えられるのです。たとえば、学校名のように全生徒で共通する情報は、prototypeにまとめておくのが理想的です。 実装例:prototypeでプロパティを共有するコード 以下は、JavaS