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

JavaScriptでプロトタイプメソッドを使ってコンストラクタ関数の変数にアクセスする方法

コンストラクタ関数で定義した変数(プロパティ)に外部からアクセス・更新したい場合は、「prototype(プロトタイプ)」を活用するのが効果的です。JavaScriptのオブジェクトは、プロトタイプからプロパティやメソッドを継承する仕組みを持っています。

また、変数へアクセスする際には「this」キーワードを使用します。thisは、メソッドが呼び出されたオブジェクト自身を参照するため、インスタンスごとの値を正しく操作できます。

実装例

以下のコードでは、Customerコンストラクタ関数を定義し、prototypeを使ってfullNameプロパティを更新するメソッドsetFullNameを追加しています。

function Customer(fullName){
    this.fullName = fullName;
}

// プロトタイプにメソッドを追加
Customer.prototype.setFullName = function(newFullName){
    this.fullName = newFullName;
}

var customer = new Customer("John Smith");
console.log("通常のプロパティ参照 = " + customer.fullName);

customer.setFullName("David Miller");
console.log("プロトタイプメソッド使用後 = " + customer.fullName);

プログラムの実行方法

上記のプログラムを実行するには、次のコマンドを使用します。

node fileName.js

ここでは、ファイル名を「demo79.js」としています。

出力結果

プログラムを実行すると、以下のような出力が得られます。

PS C:\Users\Amit\JavaScript-code> node demo79.js
通常のプロパティ参照 = John Smith
プロトタイプメソッド使用後 = David Miller

解説

この例のポイントは以下の通りです。

1. コンストラクタ関数での初期化
Customer関数内でthis.fullNameに引数の値を代入することで、生成された各インスタンスが独自のfullNameプロパティを持つようになります。

2. prototypeによるメソッド追加
Customer.prototype.setFullNameのように定義すると、すべてのインスタンスでメソッドを共有できます。これにより、インスタンスごとに関数のコピーを作成せず済むため、メモリの節約にもつながります。

3. thisによる変数へのアクセス
プロトタイプメソッド内のthisは、そのメソッドを呼び出したオブジェクト(ここではcustomer)を指すため、正しくプロパティを読み書きできます。

このように、prototypeとthisを組み合わせることで、コンストラクタ関数の変数に対して安全かつ効率的にアクセスすることが可能になります。

  1. JavaScriptで親要素にアクセスする方法【parentNodeプロパティの使い方】

    JavaScriptでDOM操作を行っていると、ある要素の親要素にアクセスしたい場面によく出会います。そんなときに活躍するのがparentNodeプロパティです。このプロパティは、対象ノードの直接の親ノードを返します。 本記事では、クリックイベントとparentNodeプロパティを組み合わせて、クリックされた子要素の親要素を取得し、そのクラス名を画面に表示するサンプルコードを紹介します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8&qu

  2. 【JavaScript】関数から返された配列にアクセスする方法

    JavaScriptでは、関数の戻り値として配列を返し、呼び出し元でその配列を受け取って自由に操作することができます。本記事では、関数から返された配列へアクセスする具体的な方法を、実際に動作するサンプルコードとともに解説します。 実装例:関数から配列を返してアクセスする 以下のサンプルでは、引数に渡された数値の1倍〜10倍の値を要素とする配列を生成して返すretTable()関数を定義しています。ボタンをクリックすると、この関数が返した配列を変数で受け取り、画面に表示します。 <!DOCTYPE html> <html lang=ja> <head> &l