Javascript プログラミングにおける複数の継承メソッドの比較分析_JavaScript スキル
この記事では、JavaScript プログラミングにおけるいくつかの継承メソッドの比較を例とともに分析します。参考のために皆さんと共有してください。詳細は次のとおりです:
オープニング
「厳密な」意味では、JavaScript は真のオブジェクト指向言語ではありません。このステートメントの理由は、一般に、弱い型付け言語としての JavaScript は、Java や C# などの強力な言語の継承メソッドとは大きく異なるため、デフォルトでは非主流のオブジェクト指向メソッドであり、この本では、この言語を「完全なオブジェクト指向ではない」言語と説明しています。実際のところ、メソッドは重要ではなく、オブジェクト指向の考え方を持っているかどうかが重要だと個人的に感じています。JavaScript はオブジェクト指向言語ではないと言っている人は、JavaScript の継承メソッドを深く勉強していない可能性があります。この記事はコミュニケーションのために書きました。
継承を実装するために JavaScript を使用する必要がある理由
初期の PC マシンのパフォーマンスはお世辞にも優れていません。すべての負荷はサーバー側にあり、クライアントのブラウザは単なる装飾でした。当時は人気のあったテーブル レイアウトと電話回線によるインターネット アクセスも相まって、Web ページの閲覧は非常に遅かったのですが、現在ではインターネット時代が急速に発展しており、パーソナル コンピュータのハードウェアは大幅に改良されており、クライアント ブラウザのパフォーマンスも非常に残念なものとなっています。 Web 開発のモデルも静かに変化しています。サーバーは以前ほど「ハード」ではなくなり、その代わりにブラウザーができるだけ多くのタスクを引き受けるようになるだけでなく、各クライアントに負担がかかります。企業 コストの節約により、Web フロントエンド開発がより興味深いものになります。ますます多くのフロントエンド フレームワークが登場し、さらに多くのフロントエンド MVC フレームワークが登場しています。この文脈において、JavaScript の役割は単純な検証を行ったり、リクエストを送信したり、DOM を操作したりするだけではありません。フロントエンドのルーティングやビジネス層など、より多くの役割を果たす必要があり、JavaScript は多くの論理的な処理を実行する必要があります。タスクには、フロントエンド データ (モデル) の抽象化が含まれており、オブジェクト指向の思考を使用することによってのみ、抽象化されたデータを適切に処理できるため、ここでは継承が非常に重要です。
単純なニーズから始めましょう
次に、フロント デスクから person という名前のモデルを抽出します。このモデルには、基本的な属性の名前と年齢が含まれています。デフォルトでは、全員が話すことができるため、各インスタンスのプロトタイプ オブジェクトに発話機能が配置されています。さて、人間の場合は、人の基本属性を継承し、これに基づいて独自の固有の属性を追加する必要があります。
function Person (name, age) { this.name = name; this.age = age; } Person.prototype.say = function(){ console.log('hello, my name is ' + this.name); }; function Man() { //my own properties }
以下では、主流の継承方法をいくつか紹介します。
1. プロトタイプチェーンの継承
function Person (name, age) { this.name = name; this.age = age; } Person.prototype.say = function(){ console.log('hello, my name is ' + this.name); }; function Man() { } Man.prototype = new Person('pursue'); var man1 = new Man(); man1.say(); //hello, my name is pursue var man2 = new Man(); console.log(man1.say === man2.say);//true console.log(man1.name === man2.name);//true
この継承メソッドは非常に直接的であり、Person のすべての属性メソッド (インスタンスとプロトタイプ) を取得するために、親クラスのインスタンス new Person('pursue') がサブクラスのプロトタイプに直接割り当てられます。 、サブクラス クラス インスタンス man1 と man2 自体は完全に空のオブジェクトです。すべての属性とメソッドはプロトタイプ チェーン上で見つかる必要があるため、見つかった属性とメソッドは同じです。
したがって、プロトタイプチェーンの継承を直接使用することは非現実的です。
2. コンストラクターの継承を使用します
function Person (name, age) { this.name = name; this.age = age; } Person.prototype.say = function(){ console.log('hello, my name is ' + this.name); }; function Man(name, age) { Person.apply(this, arguments); } //Man.prototype = new Person('pursue'); var man1 = new Man('joe'); var man2 = new Man('david'); console.log(man1.name === man2.name);//false man1.say(); //say is not a function
ここでは、サブクラスはコンストラクターで apply を使用して親クラスのコンストラクターを呼び出します。これは、少なくとも各インスタンスを直接使用するよりも、親クラスのプロパティを継承する効果を実現します。には独自のリソースがありますが、このメソッドは親クラスのインスタンス属性しか継承できないため、親クラスのすべての属性とメソッドを継承するには、プロトタイプ チェーンを変更する必要があります。したがって、結合継承方法が導入されます。
3. 組み合わせの継承
function Person (name, age) { this.name = name; this.age = age; } Person.prototype.say = function(){ console.log('hello, my name is ' + this.name); }; function Man(name, age) { Person.apply(this, arguments); } Man.prototype = new Person(); var man1 = new Man('joe'); var man2 = new Man('david'); console.log(man1.name === man2.name);//false console.log(man1.say === man2.say);//true man1.say(); //hello, my name is joe
man1 と man2 のインスタンス属性は実際にはプロトタイプ属性をオーバーライドしますが、プロトタイプの Say メソッドをオーバーライドしないことに注意してください (プロトタイプがないため)。そのため、ここでは man1.say === man2 となります。 .say は引き続き true を返すため、すべてのインスタンスに共通するプロトタイプ プロパティをオーバーライドしないように注意してください。
4. 寄生組み合わせの継承
正直に言うと、次のフォームの名前はよくわかりませんが、確かに最も一般的で古典的な JavaScript 継承メソッドです。実際、プロトタイプ オブジェクトの構造を理解するだけで済みます:
function Person (name, age) { this.name = name; this.age = age; } Person.prototype.say = function(){ console.log('hello, my name is ' + this.name); }; function Man(name, age) { Person.apply(this, arguments); } Man.prototype = Object.create(Person.prototype);//a. Man.prototype.constructor = Man;//b. var man1 = new Man('pursue'); var man2 = new Man('joe'); console.log(man1.say == man2.say); console.log(man1.name == man2.name);
実際、寄生組み合わせ継承と上記の組み合わせ継承の唯一の違いは、サブクラス (a. および b.) のプロトタイプ オブジェクトを構築する方法です。ここでは Object.creat(obj) メソッドが使用されます。受信したオブジェクトを処理します。オブジェクトは次のように浅くコピーされます:
function create(obj){ function T(){}; T.prototype = obj; return new T(); }
したがって、a. 一般的な結合継承 (Man.prototype = new Person() など) のようにサブクラスのプロトタイプを直接コピーするのではなく、サブクラスのプロトタイプ オブジェクトを親クラスのプロトタイプ オブジェクトにうまく接続します。 ;)、これは属性の非常に暴力的な上書きにすぎません。寄生組み合わせ継承方法は、インスタンス属性とプロトタイプ属性を別々に継承するため、実装がより合理的です。
注: コード b. は、instanceof の結果を変更しませんが、コンストラクターが必要なシナリオではより厳密になります。
この記事が JavaScript プログラミングのすべての人に役立つことを願っています。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









現在、携帯電話の高性能化・高機能化が進み、ほとんどの携帯電話にはモバイル決済や本人認証などに便利なNFC機能が搭載されています。ただし、一部の Xiaomi 14Pro ユーザーは、NFC 機能を有効にする方法がわからないかもしれません。次に詳しくご紹介していきます。 Xiaomi 14ProでNFC機能を有効にする方法は?ステップ 1: 携帯電話の設定メニューを開きます。ステップ 2: 「接続と共有」または「ワイヤレスとネットワーク」オプションを見つけてクリックします。ステップ 3: [接続と共有] または [ワイヤレスとネットワーク] メニューで、[NFC と支払い] を見つけてクリックします。ステップ 4: 「NFC スイッチ」を見つけてクリックします。通常、デフォルトはオフです。ステップ 5: NFC スイッチ ページで、スイッチ ボタンをクリックしてオンに切り替えます。

画面の空中スライドは、Huawei mate60シリーズで高く評価されているHuaweiの機能であり、この機能は、携帯電話のレーザーセンサーとフロントカメラの3D深度カメラを使用して、画面を必要としない一連の機能を完了します。画面をタッチする機能は、たとえば、離れた場所から TikTok を使用することですが、Huawei Pocket 2 では、離れた場所から TikTok をどのように使用すればよいでしょうか? Huawei Pocket2で空中からスクリーンショットを撮るにはどうすればよいですか? 1. Huawei Pocket2 の設定を開きます。 2. [アクセシビリティ] を選択します。 3. クリックして [Smart Perception] を開きます。 4. [Air Swipe Screen]、[Air Screenshot]、[Air Press] スイッチをオンにするだけです。 5.使用するときは、画面から20〜40CM離れて立ち、手のひらを開いて、手のひらアイコンが画面に表示されるまで待つ必要があります。

iPhone 16 ProのCADファイルが公開されており、そのデザインは以前の噂と一致しています。昨年の秋、iPhone 15 Proにはアクションボタンが追加されましたが、今秋、Appleはハードウェアのサイズに若干の調整を行う予定のようです。キャプチャボタンの追加 噂によると、iPhone 16 Proには2つ目の新しいボタンが追加される可能性があり、昨年に続き2年連続で新しいボタンが追加されることになります。新しいキャプチャボタンはiPhone 16 Proの右下に設置されると噂されており、このデザインによりカメラ制御がより便利になり、アクションボタンも他の機能に使用できるようになると予想されています。このボタンは単なるシャッターボタンではなくなります。カメラに関しては現行iPより

弊社でよく使っているオフィスソフトはWPSですが、長文の編集ではフォントが小さすぎて見づらい場合が多いので、フォントや文書全体を調整します。たとえば、文書の行間を調整すると、文書全体が非常に鮮明になります。友達全員にこの操作手順を覚えてもらうことをお勧めします。今日はそれを共有します。具体的な操作手順は次のとおりです。ぜひ見てください。調整したいWPSテキストファイルを開き、[スタート]メニューの段落設定ツールバーに小さな行間設定アイコン(図の赤丸部分)が表示されます。 2. 行間隔設定の右下隅にある小さな逆三角形をクリックすると、対応する行間隔の値が表示され、行間隔の 1 ~ 3 倍を選択できます (図の矢印で示すように)。 3. または、段落を右クリックすると、段落が表示されます。

3月2日の統計によると、ビットコインの第2層ネットワークMerlinChainのTVL総額は30億米ドルに達した。このうち、ビットコイン環境資産は90.83%を占め、15億9600万米ドル相当のBTCと4億400万米ドル相当のBRC-20資産が含まれている。先月、マーリンチェーンの合計 TVL はステーキング活動の開始から 14 日以内に 19 億 7,000 万米ドルに達し、昨年 11 月に開始され、同じく最新で同様に目を引くブラストを上回りました。 2月26日、MerlinChainエコシステムにおけるNFTの総額は4億2,000万米ドルを超え、イーサリアムに次いでNFT市場価値が最も高いパブリックチェーンプロジェクトとなった。プロジェクトの紹介 MerlinChain は OKX サポートです

C 言語と PHP の違いと比較分析 C 言語と PHP はどちらも一般的なプログラミング言語ですが、多くの点で明らかな違いがあります。この記事では、C 言語と PHP を比較分析し、具体的なコード例を通して両者の違いを説明します。 1. 構文と使用法: C 言語: C 言語はプロセス指向のプログラミング言語であり、主にシステムレベルのプログラミングと組み込み開発に使用されます。 C 言語の構文は比較的単純で低レベルであり、メモリを直接操作でき、効率的かつ柔軟です。 C言語はプログラマのプログラムの完全性を重視します

PHP7.2と5のメリットとデメリットの比較と分析。 PHPは非常に人気のあるサーバーサイドスクリプト言語であり、Web開発で広く使用されています。ただし、PHP は常に更新され、ニーズの変化に応じてさまざまなバージョンで改良されています。現在、PHP7.2 が最新バージョンですが、以前の PHP5 バージョンと比較して多くの注目すべき違いと改善点があります。この記事では、PHP7.2 と PHP5 のバージョンを比較し、それぞれの長所と短所を分析し、具体的なコード例を示します。 1. パフォーマンスPH

時代の進歩により、多くの人々の収入はますます高くなり、普段使用する携帯電話も頻繁に変更されますが、Xiaomi が最近発売した Xiaomi Mi 14 Ultra は、ユーザーにとって馴染みのあるものでしょう。快適でスムーズな体験を提供するために、新しい携帯電話には必然的に使用されない機能がたくさん出てきます。以下の使用法チュートリアルをご覧ください。 Xiaomi 14UltraAI スマート画像拡張の使用方法?まずXiaomi 14Ultraを開き、フォトアルバムに入り、拡大したい写真を選択して、フォトアルバム編集オプションに入ります。表示される選択範囲で [トリミング] [回転]、[トリミング] の順にクリックし、[スマート エキスパンド] をクリックします。最後に、自分のニーズに応じてイメージを拡張する方法を選択します。
