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

JavaScriptでプロトタイプを変更・上書きする方法

JavaScriptでは、コンストラクタ関数が持つprototypeプロパティを書き換えることで、そのプロトタイプを継承しているすべてのインスタンスのメソッドを動的に変更できます。既存のメソッドを上書きすると、すでに生成済みのインスタンスにも即座に変更内容が反映されます。

サンプルコード

<!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 {
      font-size: 20px;
      font-weight: 500;
      color: blueviolet;
   }
</style>
</head>
<body>
<h1>Modifying prototypes in JavaScript</h1>
<div class="result"></div>
<button class="Btn">CLICK HERE</button>
<h3>Click on the above button to see the original and modified prototype function</h3>
<script>
   let resEle = document.querySelector(".result");
   let BtnEle = document.querySelector(".Btn");
   function Person(name, age, occupation) {
      this.name = name;
      this.age = age;
      this.occupation = occupation;
   }
   Person.prototype.displayInfo = function () {
      return `Name: ${this.name} Age: ${this.age} Occupation: ${this.occupation}<br>`;
   };
   let person1 = new Person("Shawn", 20, "student");
   let person2 = new Person("Rohan", 25, "Manager");
   BtnEle.addEventListener("click", () => {
      resEle.innerHTML =
      "Before Modifying prototype <br>" +
      person1.displayInfo() +person2.displayInfo();
      Person.prototype.displayInfo = function () {
         return `Occupation: ${this.occupation} Age: ${this.age} Name: ${this.name} <br> `;
      };
      resEle.innerHTML +="<br>After Modifying prototype <br>" +
      person1.displayInfo() +person2.displayInfo();
   });
</script>
</body>
</html>

実行結果

JavaScriptでプロトタイプを変更・上書きする方法

「CLICK HERE」ボタンをクリックした場合 −

JavaScriptでプロトタイプを変更・上書きする方法

コードの解説

この例では、nameageoccupationの3つのプロパティを持つPersonというコンストラクタ関数を定義し、そのプロトタイプにdisplayInfoメソッドを追加しています。

ボタンをクリックすると、まずプロトタイプ変更前の状態でperson1person2の情報が「Name → Age → Occupation」の順に出力されます。その直後にPerson.prototype.displayInfoを新しい関数で上書きし、同じメソッドを再度呼び出しています。

すると、プロトタイプ変更後の出力は「Occupation → Age → Name」という順序に変化します。このことから、プロトタイプのメソッドを書き換えると、それ以前に生成されたインスタンスに対しても変更が反映されることが分かります。これはJavaScriptのプロトタイプチェーンの仕組みによるもので、インスタンス自身はメソッドを保持せず、参照時にプロトタイプから辿って呼び出されるためです。

  1. JavaScriptの関数プロトタイプとは?仕組みと使い方を解説

    JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに

  2. JavaScriptでプロトタイプを変更・上書きする方法

    JavaScriptでは、コンストラクタ関数が持つprototypeプロパティを書き換えることで、そのプロトタイプを継承しているすべてのインスタンスのメソッドを動的に変更できます。既存のメソッドを上書きすると、すでに生成済みのインスタンスにも即座に変更内容が反映されます。サンプルコード<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="