JavaScript が継承を実装する方法: 1. プロトタイプ チェーンの継承; 親クラスのインスタンスをサブクラスのプロトタイプとして使用します。 2. 構造の継承。親クラスのコンストラクターを使用してサブクラスのインスタンスを拡張します。 3. インスタンスの継承。親クラスのインスタンスに新しい機能を追加し、サブクラスのインスタンスとして返します。 4. 継承をコピーします。 5. 組み合わせの継承。 6. 寄生組み合わせの継承。
このチュートリアルの動作環境: Windows7 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。
JS はオブジェクト指向の弱い型指定言語であり、継承もその非常に強力な機能の 1 つです。では、JS で継承を実装するにはどうすればよいでしょうか?様子を見ましょう。
JS 継承の実装方法
継承を実装したいので、まず親クラスを用意する必要があります。コードは次のとおりです:
// 定义一个动物类 function Animal (name) { // 属性 this.name = name || 'Animal'; // 实例方法 this.sleep = function(){ console.log(this.name + '正在睡觉!'); } } // 原型方法 Animal.prototype.eat = function(food) { console.log(this.name + '正在吃:' + food); };
1。プロトタイプ チェーンの継承
Core: 親クラスのインスタンスをサブクラスのプロトタイプとして使用します
function Cat(){ } Cat.prototype = new Animal(); Cat.prototype.name = 'cat'; // Test Code var cat = new Cat(); console.log(cat.name); console.log(cat.eat('fish')); console.log(cat.sleep()); console.log(cat instanceof Animal); //true console.log(cat instanceof Cat); //true
features:
非常に純粋な継承関係。インスタンスはサブクラスのインスタンスであり、親クラスのインスタンスでもあります。
親クラスは、新しいプロトタイプ メソッド/プロトタイプ属性を追加します。
シンプルで実装が簡単
- #サブクラスに属性とメソッドを追加する場合は、関数内で Cat コンストラクターを使用し、Cat インスタンスにインスタンス属性を追加します。プロトタイプのプロパティとメソッドを追加する場合は、new Animal() などのステートメントの後に実行する必要があります。
- #多重継承は実装できません
- プロトタイプ オブジェクトのすべてのプロパティはすべてのインスタンスで共有されます
- サブクラス インスタンスを作成する場合、親クラスのコンストラクターにパラメーターを渡すことはできません
- 2. 構築の継承
コア:
親クラスのコンストラクターを使用してサブクラスのインスタンスを拡張することは、親クラスのインスタンス属性をサブクラスにコピーすることと同じです (プロトタイプは使用されません)function Cat(name){ Animal.call(this); this.name = name || 'Tom'; } // Test Code var cat = new Cat(); console.log(cat.name); console.log(cat.sleep()); console.log(cat instanceof Animal); // false console.log(cat instanceof Cat); // true機能: サブクラスのインスタンスが親クラスの参照属性を共有する 1 の問題を解決しました
-
##サブクラスのインスタンス作成時に親クラスにパラメータを渡すことができるようになりました
多重継承を実現できます (複数の親クラス オブジェクトを呼び出します)
欠点:
インスタンスは存在しません。親クラスのインスタンス (サブクラスのみ) インスタンス
は親クラスのインスタンス プロパティとメソッドのみを継承できますが、プロトタイプのプロパティ/メソッドは継承できません
関数の再利用は実現できません。サブクラスには親クラスのインスタンス関数のコピーがあり、パフォーマンスに影響します
3. インスタンスの継承
新しい機能を親クラス インスタンスに追加し、サブクラス インスタンスとして返されます。
function Cat(name){ var instance = new Animal(); instance.name = name || 'Tom'; return instance; } // Test Code var cat = new Cat(); console.log(cat.name); console.log(cat.sleep()); console.log(cat instanceof Animal); // true console.log(cat instanceof Cat); // false
機能:
は、呼び出しメソッドが
であるかどうかを制限しません。 new subclass()- または
- サブクラス Class()
、返されるオブジェクトは同じ効果を持ちます
欠点:
インスタンスは親クラスのインスタンスであり、サブクラスではありませんインスタンス
は多重継承をサポートしていません
-
4. 継承をコピーします
function Cat(name){ var animal = new Animal(); for(var p in animal){ Cat.prototype[p] = animal[p]; } // 如下实现修改了原型对象,会导致单个实例修改name,会影响所有实例的name值 // Cat.prototype.name = name || 'Tom'; 错误的语句,下一句为正确的实现 this.name = name || 'Tom'; } // Test Code var cat = new Cat(); console.log(cat.name); console.log(cat.sleep()); console.log(cat instanceof Animal); // false console.log(cat instanceof Cat); // true
特長:
多重継承のサポート
欠点:
#効率が低く、メモリ使用量が多い (親クラスの属性をコピーする必要があるため)
親クラスの列挙不可能なメソッドを取得できません (列挙不可能なメソッドには for in を使用してアクセスできません) )
- 5 、結合継承
Core:親クラスのコンストラクターを呼び出すことで、親のプロパティを継承しますクラスを作成し、パラメーターを渡す利点を保持し、親クラスのインスタンスをサブクラスのプロトタイプとして使用して、関数の再利用を実現します。
function Cat(name){ Animal.call(this); this.name = name || 'Tom'; } Cat.prototype = new Animal(); // 组合继承也是需要修复构造函数指向的。 Cat.prototype.constructor = Cat; // Test Code var cat = new Cat(); console.log(cat.name); console.log(cat.sleep()); console.log(cat instanceof Animal); // true console.log(cat instanceof Cat); // true
特長:
欠点を補います。インスタンスのプロパティ/メソッドとプロトタイプのプロパティ/メソッドを継承できます
これはサブクラスのインスタンスであり、親クラスのインスタンスでもあります
- ##参照属性の共有は問題ない #パラメータの引き継ぎも可能
- ##関数の再利用も可能
- 欠点:
#親クラスのコンストラクターは関数を 2 回呼び出され、2 つのインスタンスが生成されます (サブクラスのインスタンスはサブクラス プロトタイプ上のインスタンスをシールドします)
6. 寄生組み合わせの継承
- コア:
寄生を通じて、親クラスのインスタンス属性を切り離し、親クラスのコンストラクターが 2 回呼び出されたときに、 、インスタンス メソッド/属性は 2 回初期化されず、結合継承の欠点を回避します
function Cat(name){ Animal.call(this); this.name = name || 'Tom'; } (function(){ // 创建一个没有实例方法的类 var Super = function(){}; Super.prototype = Animal.prototype; //将实例作为子类的原型 Cat.prototype = new Super(); })(); // Test Code var cat = new Cat(); console.log(cat.name); console.log(cat.sleep()); console.log(cat instanceof Animal); // true console.log(cat instanceof Cat); //true Cat.prototype.constructor = Cat; // 需要修复下构造函数
機能:
完璧な
欠点:
実装がより複雑
-
例 1 :
function Animal (name) { // 属性 this.name = name || 'Animal'; // 实例方法 this.sleep = function(){ console.log(this.name + '正在睡觉!'); } //实例引用属性 this.features = []; } function Cat(name){ } Cat.prototype = new Animal(); var tom = new Cat('Tom'); var kissy = new Cat('Kissy'); console.log(tom.name); // "Animal" console.log(kissy.name); // "Animal" console.log(tom.features); // [] console.log(kissy.features); // [] tom.name = 'Tom-New Name'; tom.features.push('eat'); //针对父类实例值类型成员的更改,不影响 console.log(tom.name); // "Tom-New Name" console.log(kissy.name); // "Animal" //针对父类实例引用类型成员的更改,会通过影响其他子类实例 console.log(tom.features); // ['eat'] console.log(kissy.features); // ['eat']
原因分析:
キーポイント: 属性検索プロセス tom.features.push を実行するには、まず tom オブジェクトのインスタンス属性を検索します (見つかった)、
次に、Animal のインスタンスであるプロトタイプ オブジェクト内でそれを探します。存在することがわかった場合は、その値をこのオブジェクトの features 属性に直接挿入します。
When console.log(kissy.features);上記と同様に、kissy インスタンスで利用できない場合は、プロトタイプで見つけてください。
プロトタイプに存在する場合は、直接返されますが、このプロトタイプ オブジェクトの features 属性の値が変更されていることに注意してください。
【関連する推奨事項: JavaScript 学習チュートリアル #]
以上がJavaScriptで継承を実装する方法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
