JavaScriptでのプロトタイプの使い方を詳しく解説
JavaScript は非常に人気のあるプログラミング言語です。 JavaScript の威力はプロトタイプにあります。
プロトタイプは、JavaScript オブジェクト モデルの概念です。これにより、他のオブジェクトからプロパティとメソッドを継承してオブジェクトを構築できるようになります。これが JavaScript での継承の仕組みです。
この記事では、JavaScript におけるプロトタイプの使い方を詳しく紹介します。
1. プロトタイプとは
JavaScript のすべてのオブジェクトは、そのプロトタイプから派生します。オブジェクトのプロトタイプは、プロトタイプ チェーンを持つ別のオブジェクトです。このプロトタイプ チェーン上の各オブジェクトは、元のオブジェクトから祖先オブジェクト (オブジェクトのプロトタイプ) まで段階的に派生します。
例:
//创建一个对象 var obj = {};
上記のコードは空のオブジェクトを作成し、そのプロトタイプ チェーンは次のようになります:
obj -> Object.prototype -> null
オブジェクト obj は、Object.prototype オブジェクトから派生します。 Object.prototype は、JavaScript のすべてのオブジェクトの祖先です。
2. プロトタイプとコンストラクター
JavaScript のプロトタイプに密接に関連する 2 つの概念、コンストラクターとインスタンスがあります。
- Constructor
Constructor は、特定のタイプのオブジェクトを作成するために使用される関数です。コンストラクターはプロトタイプを使用してプロパティと関数を定義できます。例:
function Person(name, age) { this.name = name; this.age = age; }
上記のコードは、name と age の 2 つのパラメーターを持つコンストラクター Person を定義します。コンストラクターでは、 this キーワードを使用してオブジェクト インスタンスのプロパティを設定します。次に、Person オブジェクトを作成しましょう。
var person1 = new Person('Tom', 20);
このオブジェクト person1 は、Person コンストラクターによって作成され、name と age という 2 つの属性を持ちます。
- インスタンス
インスタンスは、コンストラクターによって作成されるオブジェクトです。インスタンスは、コンストラクター プロトタイプで定義されたプロパティとメソッドにアクセスできます。例:
//定义Person的原型方法 Person.prototype.sayHello = function() { console.log('Hello, my name is ' + this.name); } //调用对象方法 person1.sayHello();
は、すべての Person インスタンスからアクセスできる Person プロトタイプにメソッド SayHello を定義します。したがって、person1.sayHello() メソッドを呼び出すと、次のように出力されます。 こんにちは、私の名前はトムです。
3. プロトタイプ継承
プロトタイプ継承は、JavaScript における主な継承方法です。これはプロトタイプ チェーンを通じて実装されます。
継承とは、あるオブジェクトが別のオブジェクトのプロパティとメソッドにアクセスできることを意味します。たとえば、子オブジェクトは親オブジェクトのプロパティとメソッドを継承できます。 JavaScript では、オブジェクトは継承を通じて別のオブジェクトのプロパティとメソッドを所有できます。
プロトタイプ オブジェクトにプロパティとメソッドを追加できます。これらのプロパティとメソッドは、コンストラクターによって作成されたインスタンスによって継承されます。例:
//定义一个Animal对象 function Animal(name) { this.name = name; } //在Animal的原型上定义一个属性 Animal.prototype.color = 'red'; //创建一个实例 var cat = new Animal('Tom');
上記のコードでは、name 属性とプロトタイプ属性 color を持つ Animal オブジェクトを定義します。次に、Animal プロトタイプ属性 color を継承する cat インスタンスを作成します。
hasOwnProperty() メソッドを使用すると、インスタンスに固有のプロパティが含まれているかどうかを確認できます。例:
console.log(cat.hasOwnProperty('name')); // true console.log(cat.hasOwnProperty('color')); // false
4. プロトタイプの静的メソッドとプロパティ
静的メソッドとプロパティはコンストラクター自体に属し、インスタンスには属しません。 ES5 より前の JavaScript には、静的メソッドとプロパティを提供するための正式なメカニズムがなかったため、通常、開発者はそれらを手動でコンストラクターに追加していました。
例:
function Person(name, age) { this.name = name; this.age = age; } Person.create = function(name, age) { return new Person(name, age); }
上記のコードでは、静的メソッド create() を定義します。このメソッドは、インスタンスからではなく、コンストラクター自体から呼び出すことができます。
ES6 では、クラス構文を使用して静的メソッドとプロパティを定義できます。例:
class Person { constructor(name, age) { this.name = name; this.age = age; } static create(name, age) { return new Person(name, age); } }
上記のコードでは、クラス構文を使用して静的メソッド create() を定義します。
5. プロトタイプ継承の欠点
プロトタイプ継承は、任意のオブジェクトのプロパティとメソッドを継承できるため、非常に強力かつ柔軟です。しかし、いくつかの欠点もあります。
- すべてのインスタンスはプロトタイプを共有します
プロトタイプは共有されるため、同じコンストラクターから作成されたすべてのインスタンスは同じプロトタイプを共有します。 1 つのインスタンスがプロトタイプのプロパティまたはメソッドを変更すると、すべてのインスタンスが影響を受けます。
- インスタンスのプライベート変数にアクセスできません
プロトタイプ メソッドは、インスタンスのプライベート変数 (つまり、コンストラクター内で定義された変数) にアクセスできません。これらのプライベート変数はコンストラクター内でのみ使用できるためです。
6. 概要
プロトタイプは JavaScript の非常に強力な概念であり、継承や共有コードなどの実装に使用できます。実際の開発では、プロトタイプ継承を適切に使用すると、開発効率の向上とコード量の削減に役立ちます。ただし、プロトタイプ継承の欠点、特にプロトタイプの共有やプライベート変数にアクセスできないなどの問題についても明確にする必要があります。
以上がJavaScriptでのプロトタイプの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









この記事では、functionコンポーネントでのデータフェッチやDOM操作などの副作用を管理するためのフックであるReactの使用Effectについて説明します。メモリリークなどの問題を防ぐための使用、一般的な副作用、およびクリーンアップについて説明します。

怠zyな読み込みは、必要になるまでコンテンツの読み込みを遅延させ、初期負荷時間とサーバーの負荷を削減することにより、Webパフォーマンスとユーザーエクスペリエンスを改善します。

この記事では、Virtual DOMツリーを比較してDOMを効率的に更新するReactの調整アルゴリズムについて説明します。パフォーマンスの利点、最適化技術、ユーザーエクスペリエンスへの影響について説明します。

この記事では、JavaScriptのカレーについて説明します。これは、マルチアーグメント関数を単一argument関数シーケンスに変換する手法です。 Curryingの実装、部分的なアプリケーションなどの利点、実用的な用途、コード読み取りの強化を調査します

JavaScriptの高次関数は、抽象化、共通パターン、および最適化技術を通じて、コードの簡潔さ、再利用性、モジュール性、およびパフォーマンスを強化します。

この記事では、ReactのUseContextを説明しています。これにより、小道具掘削を避けることで国家管理を簡素化します。再レンダーの削減により、集中状態やパフォーマンスの改善などの利点について説明します。

記事では、Connect()、MapStateToprops、MapDispatchToprops、およびパフォーマンスへの影響を説明するReduxストアに反応コンポーネントをReduxストアに接続します。

記事では、PreventDefault()メソッドを使用して、イベントハンドラーのデフォルト動作の防止、ユーザーエクスペリエンスの強化などの利点、およびアクセシビリティの懸念などの潜在的な問題について説明します。
