ホームページ ウェブフロントエンド jsチュートリアル JavaScript プロトタイプ継承コンストラクター継承_javascript スキル

JavaScript プロトタイプ継承コンストラクター継承_javascript スキル

May 16, 2016 pm 06:02 PM
コンストラクタ 継承する

前回は「JavaScript プロトタイプ継承の基本的な仕組み」について説明しましたが、今回はコンストラクターの継承について詳しく説明します。

簡単な例から始めて、人間を記述する People コンストラクターを作成します。

コードをコピーします コードは次のとおりです。

function People(){
this.race = 'Stupid Human';
}

次に、次のような Yellow コンストラクターを作成します。黄色人種 :
コードをコピー コードは次のとおりです:

function Yellow(name, Skin){
this.name = name;
this.skin = Skin;

Yellow が人間の People オブジェクトを継承できるようにするには、JavaScript でシミュレートできます。いろんな意味で。

1. オブジェクト マスカレード

オブジェクト マスカレードとは、簡単に言うと、抽象クラスを通常の関数として定義するコンストラクタを使用して、疑似継承を実現することです。 >

コードをコピー
コードは次のとおりです。 function Yellow(name, Skin) { this._extend = People;
this._extend();
delete this._extend; // 人物への参照を削除します。
this.skin = スキン; yellow1 をインスタンス化します
var yellow1 = new Yellow('Xiao Ming', 'Yellow Skin');
console.log( yellow1.name); //Xiao Ming
console.log( yellow1.race); //愚かな人間


このコードでは、Yellow のプライベート メソッド _extend を追加します。関数自体は参照の形式でのみ存在するため、実行中に People メソッドが自動的に呼び出され、Yellow が実行されます。コンストラクターの name パラメーター。上記のプロセスが完了し、外部メソッドへの参照がクリアされた後で、Yellow オブジェクト独自のプロパティとメソッドを定義する必要があります。

注: 複数の継承はオブジェクトの偽装を通じて実現できます

2. Call/apply メソッド
何も使用せずに call/apply メソッドを使用して継承を実装する方が簡単な場合があります。面倒な手順 操作:




コードをコピー


コードは次のとおりです:
function Yellow(name,スキン) { People.apply(this, argument); this.name = name; this.skin = スキン; // yellow2 をインスタンス化します
var yellow2 = new Yellow(' David', 'darkskin')
console.log( yellow2.name); // デビッド
console.log( yellow2.race); // これが入力です適用引数配列の代わりに、新しい配列またはリテラル配列を使用することもできます。


3. プロトタイプの連鎖

最初のプロトタイプ継承メソッドは、オブジェクトのプロトタイプを親クラスのインスタンスにポイントすることです:




コードをコピーします


コードは次のとおりです。

Yellow.prototype = new People() Yellow.prototype.constructor = Yellow ; //最初のプロトタイプは完全にクリアされているため、コンストラクターをリセットするのが最善です var yellow3 = new Yellow('小王', '黄 Skin'); console.log( yellow3.race); // 愚かな人間たち 上記のコードは逆に理解できます。 yellow3 インスタンス自体は Race 属性を見つけることができず、そのプロトタイプの Race 属性はたまたまそのインスタンスの Race 属性です。人々は反対します。
People オブジェクトのプロパティがプロトタイプに記述されている場合、インスタンスを作成する必要はありません。Yellow のプロトタイプ プロパティを People のプロトタイプ プロパティにポイントするだけです。




コードをコピーします


コードは次のとおりです:

function People(){}; People.prototype.race = 'Stupid Humans'; Yellow.prototype = People.prototype; Yellow.prototype.constructor = Yellow; これは、ポインタを変更するだけです。環境に優しい。ただし、参照型の関係により、Yellow と People は同じプロトタイプ オブジェクトを指します。つまり、Yellow.prototype.constructor を変更すると、実際には People のプロトタイプ オブジェクトが破棄されます。
この場合、空のリレー オブジェクトを使用して、親クラスのプロトタイプをバイパスできます:




コードをコピー


コードは次のとおりです:

var F = function(){};
F.prototype = People.prototype;
Yellow.prototype = new F();
Yellow.prototype.constructor = 黄;
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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

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

PHP エラーの解決: 親クラスの継承時に問題が発生しました PHP エラーの解決: 親クラスの継承時に問題が発生しました Aug 17, 2023 pm 01:33 PM

PHP エラーの解決: 親クラスの継承時に発生する問題 PHP では、継承はオブジェクト指向プログラミングの重要な機能です。継承により、元のコードを変更することなく、既存のコードを再利用し、拡張および改善できます。継承は開発で広く使用されていますが、親クラスから継承するときにエラーの問題が発生することがあります。この記事では、親クラスから継承するときに発生する一般的な問題の解決に焦点を当て、対応するコード例を示します。質問 1: 親クラスが見つかりません。親クラスの継承処理中に、システムが親クラスを見つからない場合、

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

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

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

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

継承した Java プログラムを使用して定期預金 (FD) および定期預金 (RD) の利息を計算します 継承した Java プログラムを使用して定期預金 (FD) および定期預金 (RD) の利息を計算します Aug 20, 2023 pm 10:49 PM

継承は、あるクラスのプロパティと動作に別のクラスからアクセスできるようにする概念です。メソッドやメンバ変数を継承するクラスをスーパークラスまたは親クラスと呼び、メソッドやメンバ変数を継承するクラスをサブクラスまたはサブクラスと呼びます。 Javaでは、クラスを継承するために「extends」キーワードを使用します。この記事では、相続を利用して定期預金や定期預金の利息を計算する Java プログラムについて説明します。まず、ローカル マシンの IDE でこれら 4 つの Java ファイル Acnt.java を作成します。このファイルには、金利や金額などの口座詳細を保存するために使用される抽象クラス「Acnt」が含まれます。また、計算用のパラメータ「amnt」を持つ抽象メソッド「calcIntrst」も含まれます。

PHP のパッケージング技術とアプリケーション PHP のパッケージング技術とアプリケーション Oct 12, 2023 pm 01:43 PM

PHP のカプセル化テクノロジとアプリケーションのカプセル化は、オブジェクト指向プログラミングにおける重要な概念であり、外部プログラムに統一されたアクセス インターフェイスを提供するために、データとデータに対する操作を一緒にカプセル化することを指します。 PHP では、アクセス制御修飾子とクラス定義を通じてカプセル化を実現できます。この記事では、PHP のカプセル化テクノロジとそのアプリケーション シナリオを紹介し、いくつかの具体的なコード例を示します。 1. カプセル化されたアクセス制御修飾子 PHP では、カプセル化は主にアクセス制御修飾子によって実現されます。 PHP には 3 つのアクセス制御修飾子が用意されています。

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

Javaを使用してプロキシ最終クラスの継承を強制するにはどうすればよいですか? Javaを使用してプロキシ最終クラスの継承を強制するにはどうすればよいですか? Sep 06, 2023 pm 01:27 PM

Javaを使用してプロキシ最終クラスの継承を強制するにはどうすればよいですか? Java では、final キーワードはクラス、メソッド、変数を変更するために使用され、継承、オーバーライド、または変更できないことを示します。ただし、場合によっては、特定のニーズを達成するために、最終クラスの継承を強制する必要がある場合があります。この記事では、プロキシ パターンを使用してそのような機能を実装する方法について説明します。プロキシ パターンは、別のオブジェクト (プロキシ オブジェクト) の動作を制御できる中間オブジェクト (プロキシ オブジェクト) を作成できるようにする構造設計パターンです。

See all articles