ホームページ ウェブフロントエンド jsチュートリアル Javascript プロトタイプと継承 (プロトタイプと継承)_JavaScript スキル

Javascript プロトタイプと継承 (プロトタイプと継承)_JavaScript スキル

May 16, 2016 pm 06:54 PM
javascript プロトタイプ 継承する

JavaScript オブジェクトはプロトタイプ オブジェクトからプロパティを継承します。すべてのオブジェクトにはプロトタイプがあり、プロトタイプのすべてのプロパティは、それをプロトタイプとして使用するオブジェクトのプロパティと似ています。簡単に言えば、すべてのオブジェクトはプロトタイプからプロパティ を継承します。
(各オブジェクトはそのプロトタイプからプロパティを継承します)。

オブジェクトのプロトタイプは、そのコンストラクター関数によって定義されます。 JavaScript のすべての関数にはプロトタイプ プロパティがあります。このプロパティは最初は空で、追加したプロパティはコンストラクターによって作成されたオブジェクトによって所有されます。

プロトタイプ オブジェクトはコンストラクターに関連付けられます。これは、プロトタイプがメソッドや他の定数を配置するのに理想的な場所になる可能性があることを意味します。プロトタイプ内のプロパティは、新しく作成されたオブジェクトにはコピーされません。そのプロパティは、オブジェクトのプロパティとまったく同じように見えます。これは、プロトタイプを使用すると、同じタイプの複数のオブジェクトが占有するメモリを大幅に削減できることを意味します。

各クラスには、一連のプロパティを持つプロトタイプ オブジェクトが 1 つだけあります。ただし、実行時にクラスの複数のインスタンスを作成する場合があります。では、プロトタイプのプロパティへの読み取りまたは書き込みが発生するとどうなるでしょうか?
属性を読み取るとき、JavaScript はまずオブジェクト自体にこの属性があるかどうかを調べます。ない場合は、プロトタイプにその属性が存在するかどうかを検索します。そうであれば、結果が返されます。
プロトタイプの属性を記述する場合、複数のオブジェクトがプロトタイプを共有するため、当然ながらプロトタイプに直接書き込むことはできません。このとき、JavaScript は実際にオブジェクト上に同じ名前のプロパティを作成し、そこに値を書き込みます。次回このプロパティを読み取るとき、JavaScript はオブジェクトのプロパティでそれをすぐに見つけるため、プロトタイプを調べる必要はありません。このとき、「オブジェクトのプロパティがプロトタイプのプロパティをマスクまたは非表示にする」と言います。(影または非表示)。

上記の議論からわかるように、実際、クラスを設計するとき、マスターする必要があるのは 1 つの原則だけです。プロトタイプで一部のメソッドのみを定義する (メソッドは通常は変更されません)、定数、定数など。 これにより、混乱が少なくなります。
例:

// クラスのコンストラクター メソッドを定義します。
// これを使用して、
// それぞれの Circle オブジェクト。
関数Circle(x, y, r)
{
この.x = x;  // 円の中心の X 座標

これ.y = y;  // 円の中心の Y 座標

これ.r = r;  // 円の半径
}


// Create and discard an initial Circle object.
// This forces the prototype object to be created in JavaScript 1.1.
new Circle(0,0,0);


// Define a constant: a property that will be shared by
// all circle objects. Actually, we could just use Math.PI,
// but we do it this way for the sake of instruction.
Circle.prototype.pi =
3.14159;


// 円の円周を計算するメソッドを定義します。
// まず関数を宣言し、それをプロトタイプ プロパティに割り当てます。
// 上記で定義した定数の使用に注意してください。
function Circle_circumference( ) { return
2
*
this.pi *
これ.r; }
Circle.prototype.circumference =Circle_circumference;


// 別のメソッドを定義します。今回は関数リテラルを使用して
// 関数を定義し、それをプロトタイプ プロパティに割り当てます。
Circle.prototype.area =
関数( ) { return
this.pi *
これ.r *
これ.r; }


// Circle クラスが定義されています。
// これで、インスタンスを作成し、そのメソッドを呼び出すことができます。
var c =
new Circle(0.00.01.0);
var a =c.area( );
var p = c .circumference( );


組み込みクラスのプロトタイプ

String や Date などのシステム組み込みクラスを持つことができるのはユーザー定義クラスだけではありません。プロトタイプもいくつかあります。また、新しいメソッドやプロパティなどを追加することもできます。
The following code adds a useful function to all String objects:

// Returns true if the last character is c
String.prototype.endsWith =
function(c) {
 return (c ==
this.charAt(this.length-1))
}


Then we can call it like this:

var message =
"hello world";
message.endsWith('h') // Returns false
message.endsWith('d') // Returns true

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

C++関数継承の詳しい解説:継承で「基底クラスポインタ」と「派生クラスポインタ」を使うには? C++関数継承の詳しい解説:継承で「基底クラスポインタ」と「派生クラスポインタ」を使うには? May 01, 2024 pm 10:27 PM

関数の継承では、「基底クラス ポインター」と「派生クラス ポインター」を使用して継承メカニズムを理解します。基底クラス ポインターが派生クラス オブジェクトを指す場合、上方変換が実行され、基底クラスのメンバーのみにアクセスされます。派生クラス ポインターが基本クラス オブジェクトを指す場合、下向きキャストが実行される (安全ではない) ため、注意して使用する必要があります。

継承とポリモーフィズムは C++ のクラス結合にどのような影響を与えますか? 継承とポリモーフィズムは C++ のクラス結合にどのような影響を与えますか? Jun 05, 2024 pm 02:33 PM

継承とポリモーフィズムはクラスの結合に影響します。派生クラスは基本クラスに依存するため、継承により結合が増加します。ポリモーフィズムにより、オブジェクトは仮想関数と基本クラス ポインターを通じて一貫した方法でメッセージに応答できるため、結合が軽減されます。ベスト プラクティスには、継承を控えめに使用すること、パブリック インターフェイスを定義すること、基本クラスへのデータ メンバーの追加を回避すること、依存関係の注入を通じてクラスを分離することが含まれます。ポリモーフィズムと依存性注入を使用して銀行口座アプリケーションの結合を軽減する方法を示す実践的な例。

C++ 関数の継承の詳細な説明: 継承のエラーをデバッグするには? C++ 関数の継承の詳細な説明: 継承のエラーをデバッグするには? May 02, 2024 am 09:54 AM

継承エラーのデバッグのヒント: 正しい継承関係を確認します。デバッガーを使用してコードをステップ実行し、変数値を調べます。仮想修飾子を正しく使用してください。隠れた相続によって引き起こされる相続ダイアモンド問題を調べてください。抽象クラスに実装されていない純粋仮想関数がないか確認します。

C++ 関数の継承の詳細な説明: 継承における 'is-a' と 'has-a' の関係を理解するには? C++ 関数の継承の詳細な説明: 継承における 'is-a' と 'has-a' の関係を理解するには? May 02, 2024 am 08:18 AM

C++の関数継承を詳しく解説:「is-a」と「has-a」の関係をマスターしよう 関数継承とは?関数の継承は、派生クラスで定義されたメソッドを基本クラスで定義されたメソッドに関連付ける C++ の手法です。これにより、派生クラスが基本クラスのメソッドにアクセスしてオーバーライドできるようになり、基本クラスの機能が拡張されます。 「is-a」および「has-a」関係 関数継承では、「is-a」関係は、派生クラスが基本クラスのサブタイプであること、つまり、派生クラスが基本クラスの特性と動作を「継承」することを意味します。基本クラス。 「has-a」関係は、派生クラスに基本クラス オブジェクトへの参照またはポインターが含まれていること、つまり、派生クラスが基本クラス オブジェクトを「所有」していることを意味します。構文関数継承を実装する方法の構文は次のとおりです: classDerivedClass:pu

原神バージョン 4.4 の新しいマップの紹介 原神バージョン 4.4 の新しいマップの紹介 Jan 31, 2024 pm 06:36 PM

原神 バージョン 4.4 の新しいマップの紹介. 皆さん、原神 4.4 バージョンでは、立月のシー ランタン フェスティバルも始まりました. 同時に、バージョン 4.4 では神羽渓谷と呼ばれる新しいマップ エリアが開始されます。提供された情報によると、沈雨谷は実際には喬営村の一部ですが、プレイヤーはそれを沈雨谷と呼ぶことに慣れています。それでは、新しい地図をご紹介します。原神バージョン 4.4 の新マップのご紹介です。バージョン 4.4 では、立月北部に「陳兪渓谷・上谷」、「陳兪渓谷・南嶺」、「来新山」がオープンします。谷・上谷」。 ※魔神クエスト・第3幕「ドラゴンと自由の歌」プロローグをクリアすると、テレポートアンカーポイントが自動で解放されます。 2. 喬営荘 暖かい春風が再び陳嶼の山野を撫でるとき、香りのよい

「PHP によるオブジェクト指向プログラミング入門: 概念から実践まで」 「PHP によるオブジェクト指向プログラミング入門: 概念から実践まで」 Feb 25, 2024 pm 09:04 PM

オブジェクト指向プログラミングとは何ですか?オブジェクト指向プログラミング (OOP) は、現実世界のエンティティをクラスに抽象化し、オブジェクトを使用してこれらのエンティティを表すプログラミング パラダイムです。クラスはオブジェクトのプロパティと動作を定義し、オブジェクトはクラスをインスタンス化します。 OOP の主な利点は、コードの理解、保守、再利用が容易になることです。 OOP の基本概念 OOP の主な概念には、クラス、オブジェクト、プロパティ、メソッドが含まれます。クラスはオブジェクトの設計図であり、オブジェクトのプロパティと動作を定義します。オブジェクトはクラスのインスタンスであり、クラスのすべてのプロパティと動作を備えています。プロパティは、データを保存できるオブジェクトの特性です。メソッドは、オブジェクトのデータを操作できるオブジェクトの関数です。 OOP の利点 OOP の主な利点は次のとおりです。 再利用性: OOP はコードをより高度なものにすることができます。

C++ 関数の継承の説明: 継承を使用すべきでないのはどのような場合ですか? C++ 関数の継承の説明: 継承を使用すべきでないのはどのような場合ですか? May 04, 2024 pm 12:18 PM

C++ 関数の継承は、次の状況では使用しないでください。 派生クラスが異なる実装を必要とする場合、異なる実装を持つ新しい関数を作成する必要があります。派生クラスが関数を必要としない場合は、空のクラスとして宣言するか、プライベートの未実装の基本クラス メンバー関数を使用して関数の継承を無効にする必要があります。関数が継承を必要としない場合は、コードの再利用を実現するために他のメカニズム (テンプレートなど) を使用する必要があります。

Java インターフェイスと抽象クラス: プログラミング天国への道 Java インターフェイスと抽象クラス: プログラミング天国への道 Mar 04, 2024 am 09:13 AM

インターフェイス: 実装のないコントラクト インターフェイスは、Java でメソッド シグネチャのセットを定義しますが、具体的な実装は提供しません。これは、インターフェイスを実装するクラスに、その指定されたメソッドを強制的に実装するコントラクトとして機能します。インターフェイス内のメソッドは抽象メソッドであり、メソッド本体はありません。コード例: publicinterfaceAnimal{voideat();voidsleep();} 抽象クラス: 部分的に実装されたブループリント 抽象クラスは、そのサブクラスによって継承できる部分的な実装を提供する親クラスです。インターフェイスとは異なり、抽象クラスには具体的な実装と抽象メソッドを含めることができます。抽象メソッドは、abstract キーワードを使用して宣言され、サブクラスによってオーバーライドされる必要があります。コード例: publicabstractcla

See all articles