JavaScriptの関数プロトタイプとは?仕組みと使い方を解説
JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。
関数のプロトタイプには、以下のようにしてアクセスできます。
functionName.prototype
コンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに同じメソッドを重複して定義する必要がなくなり、メモリの使用量を抑えることも可能です。
サンプルコード
以下は、JavaScriptにおける関数プロトタイプの使用例です。
<!DOCTYPE html>
<html lang="ja">
<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>Function prototypes in JavaScript</h1>
<div class="result"></div>
<br />
<button class="Btn">Click Here</button>
<h3>上のボタンをクリックすると、person1とperson2オブジェクトのwelcomeメソッドが呼び出されます</h3>
<script>
let resEle = document.querySelector(".result");
let BtnEle = document.querySelector(".Btn");
function personConstructor(fName, lName) {
this.fName = fName;
this.lName = lName;
}
personConstructor.prototype.welcome = function () {
return "Welcome " + this.fName + " " + this.lName;
};
let person1 = new personConstructor("Rohan", "Sharma");
let person2 = new personConstructor("Shawn", "Smith");
BtnEle.addEventListener("click", () => {
resEle.innerHTML = "person1.welcome() = " + person1.welcome() + "<br>";
resEle.innerHTML += "person2.welcome() = " + person2.welcome() + "<br>";
});
</script>
</body>
</html>コードのポイント
personConstructorというコンストラクタ関数を定義し、名前(fName)と苗字(lName)を受け取ります。personConstructor.prototype.welcomeとして、プロトタイプにwelcomeメソッドを追加します。newキーワードで生成されたperson1とperson2は、それぞれ個別のデータを持ちながら、共通のwelcomeメソッドを参照しています。
実行結果

「Click Here」ボタンをクリックすると、以下のように表示されます。

このように、関数プロトタイプを利用することで、複数のオブジェクトが一つのメソッド定義を共有できるため、コードの再利用性が高まり、より効率的なプログラムを書くことができます。
-
JavaScriptでプロトタイプを変更・上書きする方法
JavaScriptでは、コンストラクタ関数が持つprototypeプロパティを書き換えることで、そのプロトタイプを継承しているすべてのインスタンスのメソッドを動的に変更できます。既存のメソッドを上書きすると、すでに生成済みのインスタンスにも即座に変更内容が反映されます。サンプルコード<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="
-
JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説
JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン