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

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

Nov 09, 2023 pm 05:59 PM
プロトタイプチェーンプロトタイプ

プロトタイプは、他のオブジェクトのプロパティとメソッドを定義するために使用される、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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。