ホームページ >よくある問題 >プロトタイプとプロトタイプチェーンとは何ですか

プロトタイプとプロトタイプチェーンとは何ですか

百草
百草オリジナル
2023-11-09 17:59:482221ブラウズ

プロトタイプは、他のオブジェクトのプロパティとメソッドを定義するために使用される、js のオブジェクトです。各コンストラクターには、プロトタイプ属性があります。この属性は、新しいオブジェクトを作成するときにプロトタイプ オブジェクトを指すポインターです。この新しいオブジェクトは、そのコンストラクターのプロトタイプ属性からプロパティとメソッドを継承します。プロトタイプ チェーンでは、オブジェクトのプロパティにアクセスしようとすると、js はまずオブジェクトにこのプロパティがあるかどうかを確認します。そうでない場合、js はオブジェクトのプロトタイプを参照します。プロトタイプ オブジェクトにこのプロパティがない場合は、原型の原型を探し続ける。

プロトタイプとプロトタイプチェーンとは何ですか

このチュートリアルのオペレーティング システム: Windows 10 システム、DELL G3 コンピューター。

プロトタイプとプロトタイプ チェーンは、オブジェクト指向プログラミング、特に動的プロトタイプをサポートする JavaScript などの言語において重要な概念です。プロトタイプとプロトタイプ チェーンを理解することは、オブジェクトがどのように作成および使用されるか、またそのメソッドを呼び出す方法を理解するために重要です。

プロトタイプ:

プロトタイプは、他のオブジェクトのプロパティとメソッドを定義するために使用される JavaScript のオブジェクトです。各コンストラクターには、プロトタイプ オブジェクトへのポインターであるプロトタイプ属性があります。新しいオブジェクトが作成されると、新しいオブジェクトはそのコンストラクター (つまり、プロトタイプ オブジェクト) のプロトタイプ属性からプロパティとメソッドを継承します。

例:

function Person(name) {  
  this.name = name;  
}  
  
Person.prototype.sayHello = function() {  
  return 'Hello, my name is ' + this.name;  
};  
  
let person1 = new Person('Alice');  
let person2 = new Person('Bob');  
  
console.log(person1.sayHello()); // 输出: 'Hello, my name is Alice'  
console.log(person2.sayHello()); // 输出: 'Hello, my name is Bob'

上記の例では、Person コンストラクターを定義し、person.prototype を通じて SayHello メソッドを定義しました。次に、2 つの Person オブジェクトを作成しました。どちらも SayHello メソッドを継承しています。これは、それらがすべてプロトタイプ オブジェクト Person.prototype から継承されているためです。

プロトタイプ チェーン:

オブジェクトのプロパティにアクセスしようとすると、JavaScript はまずオブジェクトにこのプロパティがあるかどうかを確認します。そうでない場合、JavaScript はオブジェクトのプロトタイプ (つまり、コンストラクターのプロトタイプ属性) を参照します。プロトタイプ オブジェクトにこのプロパティがない場合、JavaScript はこのプロパティを持つオブジェクトが見つかるか、プロトタイプ チェーンの先頭 (つまり null) に到達するまで、プロトタイプのプロトタイプを探し続けます。これはプロトタイプチェーンと呼ばれます。

例:

function Person(name) {  
  this.name = name;  
}  
  
Person.prototype.sayHello = function() {  
  return 'Hello, my name is ' + this.name;  
};  
  
let person1 = new Person('Alice');  
delete person1.sayHello; // 删除person1的sayHello属性  
  
console.log(person1.sayHello()); // 输出: 'Hello, my name is Alice'

上の例では、person1 のsayHello 属性を削除しました。 person1.sayHello() にアクセスしようとすると、JavaScript はまず person1 にsayHello 属性があるかどうかを確認します。 person1 にはこの属性がないため、JavaScript は、sayHello メソッドを持つ person1 のプロトタイプ (すなわち、person.prototype) を参照し、それが呼び出されます。これがプロトタイプ チェーンの機能です。プロトタイプ チェーンは、オブジェクト自体にプロパティやメソッドが定義されていない場合でも、オブジェクトのプロパティやメソッドを共有する方法を提供します。

以上がプロトタイプとプロトタイプチェーンとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。