JavaScript/Function/prototype

カテゴリ:Book:JavaScript#Function/prototype%20

Function.prototype は、コンストラクタとして使用できる関数インスタンスが持つプロパティです。このプロパティは、その関数がコンストラクタとして呼び出された際に生成されるオブジェクトのプロトタイプを指定します。このプロパティは、関数がコンストラクタとして使用される場合にのみ意味を持ちます[1]

構文

func.prototype
  • func: プロトタイプを確認または設定する対象のコンストラクタ関数。

コンストラクタ関数の prototype プロパティを確認するプログラム

以下のプログラムは、Function.prototype を使用してコンストラクタ関数のプロトタイプを確認します。

function Person(name) {
  this.name = name;
}

console.log(Person.prototype); // Person {}

このプログラムでは、Person コンストラクタ関数の prototype プロパティを確認しています。Person.prototype は、Person コンストラクタ関数によって生成されるオブジェクトのプロトタイプを指定します。

プロトタイプにメソッドを追加するプログラム

以下のプログラムは、Function.prototype を使用してプロトタイプにメソッドを追加します。

function Person(name) {
  this.name = name;
}

Person.prototype.greet = function() {
  console.log(`Hello, ${this.name}!`);
};

const person = new Person('Alice');
person.greet(); // "Hello, Alice!"

このプログラムでは、Person コンストラクタ関数の prototype プロパティに greet メソッドを追加しています。これにより、Person コンストラクタ関数によって生成されるすべてのオブジェクトは、greet メソッドを使用できます。

注意点

  • コンストラクタ関数: prototype プロパティは、コンストラクタとして使用できる関数インスタンスにのみ存在します。通常の関数やアロー関数にはこのプロパティはありません。
  • プロトタイプチェーン: prototype プロパティは、コンストラクタ関数によって生成されるオブジェクトのプロトタイプチェーンを形成します。これにより、オブジェクトはプロトタイプに定義されたメソッドやプロパティを継承します。
  • 変更可能: prototype プロパティは変更可能(Writable: true)ですが、列挙不可(Enumerable: false)であり、設定不可(Configurable: false)です。
  • デフォルト値: コンストラクタ関数が作成されると、その prototype プロパティは自動的に生成されます。このプロトタイプオブジェクトは、constructor プロパティを持ち、それが元のコンストラクタ関数を参照します。

プロパティ

Function.prototype.length
Function.prototype.name

アクセサ

get Function.prototype.arguments
get Function.prototype.caller

メソッド

Function.prototype.apply()
Function.prototype.bind()
Function.prototype.call()
Function.prototype.constructor()
Function.prototype.toString()
Function.prototype [ Symbol.hasInstance ] ()

脚註

  1. これは、コンストラクタ関数のプロトタイプを指定するために使用されます。

外部リンク

カテゴリ:Book:JavaScript#Function/prototype%20 カテゴリ:JavaScript
カテゴリ:Book:JavaScript カテゴリ:JavaScript カテゴリ:Pages using the JsonConfig extension