ホームページ ウェブフロントエンド jsチュートリアル 保守可能なオブジェクト指向 JavaScript コードを記述する方法

保守可能なオブジェクト指向 JavaScript コードを記述する方法

Nov 26, 2016 am 10:15 AM
javascript

保守可能なオブジェクト指向 JavaScript コードを作成できると、コストが節約されるだけでなく、人気も高まります。信じないで?いつかあなたまたは他の誰かが戻ってきて、あなたのコードを再利用する可能性があります。この経験をできるだけ苦痛から減らすことができれば、時間を大幅に節約できます。地球上の誰もが時は金なりであることを知っています。同様に、誰かの悩みを解決することで、その人の好意を得ることができるかもしれません。ただし、保守可能なオブジェクト指向 JavaScript コードの記述方法を検討する前に、オブジェクト指向とは何かを簡単に見てみましょう。オブジェクト指向の概念をすでに理解している場合は、次のセクションを直接スキップできます。
オブジェクト指向とは何ですか?
オブジェクト指向プログラミングは、主にコードを通じて現実世界の物理オブジェクトを表します。オブジェクトを作成するには、まずそれを定義する「クラス」を作成する必要があります。 クラスは、アカウント、従業員、ナビゲーション メニュー、車、植物、広告、飲み物など、ほぼあらゆるものを表すことができます。そして、オブジェクトを作成するたびに、クラスからオブジェクトをインスタンス化します。つまり、クラスのインスタンスがオブジェクトとして作成されます。実際、オブジェクトは通常、同じタイプの複数のものを扱うときに使用されます。さらに、単純な関数型プログラムだけでも素晴らしい仕事をすることができます。オブジェクトは基本的にデータのコンテナです。したがって、従業員オブジェクトには、従業員番号、名前、入社日、役職、給与、年功などを保存することができます。オブジェクトには、データを処理する関数 (「メソッド」とも呼ばれます) も含まれています。メソッドは、データの整合性を確保し、保存前にデータを変換するための仲介として使用されます。たとえば、メソッドは任意の形式の日付を受け入れ、それを保存する前に標準化された形式に変換できます。最後に、クラスは他のクラスから継承することもできます。継承により、同じコードを異なるクラスで再利用できます。たとえば、銀行口座とビデオ ストアのアカウントはどちらも、個人情報、口座開設日、支店情報などを含む基本的な口座クラスを継承できます。その後、それぞれがトランザクションまたはローン処理のための独自のデータ構造とメソッドを定義できます。
警告: JavaScript のオブジェクト指向は同じではありません
前のセクションでは、古典的なオブジェクト指向プログラミングの基本について概説しました。古典的と言ったのは、JavaScript がこれらのルールに従っていないからです。対照的に、JavaScript クラスは関数として記述され、継承はプロトタイプを通じて実装されます。プロトタイプの継承は基本的に、クラスからクラスを継承するのではなく、プロトタイプのプロパティを使用してオブジェクトの継承を実装することを意味します。
オブジェクトのインスタンス化
以下はJavaScriptでのオブジェクトのインスタンス化の例です:
// Employeeクラスを定義します
function Employee(num, fname, lname) {
this.getFullName = function () {
return fname + " " + lname ;
}
};

// Employee オブジェクトをインスタンス化します
var john = new Employee("4815162342", "John", "Doe");
alert("従業員のフルネームは " + john.getFullName( ) );
ここで、注意すべき重要な点が 3 つあります:
1 「クラス」関数名の最初の文字は大文字にする必要があります。これは、関数が通常の関数のように呼び出されるのではなく、インスタンス化されることを目的としていることを示します。
2 new 演算子はインスタンス化中に使用されます。 new を省略して関数を呼び出すだけだと、多くの問題が発生します。
3 getFullName はこの演算子に割り当てられているため、公開されていますが、fname と lname は公開されていません。 Employee 関数によって生成されたクロージャは、getFullName に fname および lname へのアクセスを与えますが、他のクラスに対してはプライベートのままです。
プロトタイプの継承
以下は、JavaScript でのプロトタイプの継承の例です。
// Human クラスを定義します。
function Human() {
this.setName = function (fname, lname) {
this.fname = fname;
this. lname = lname ;
}
this.getFullName = function () {
return this.fname + " " + this.lname;
}
}

// 従業員クラスを定義する
function Employee(num) {
this.getNum = function ( ) {
return num;
}
};
// Employee に Human クラスを継承させる
Employee.prototype = new Human();
// Employee オブジェクトをインスタンス化する
var john = new Employee("4815162342 」 );
john.setName("John", "Doe");
alert(john.getFullName() + "の従業員番号は " + john.getNum());
今回作成した Human クラスにはすべてが含まれています人間に共通のプロパティ - 従業員だけが名前を持っているわけではなく、誰もが名前を持っているため、fname と lname も入れました。次に、Human オブジェクトをそのプロトタイプ プロパティに割り当てます。
継承によるコードの再利用
前の例では、元の Employee クラスが 2 つの部分に分割されました。すべての共通の人間属性は Human クラスに移動され、その後 Employee が Human を継承しました。この場合、Human のプロパティは、Student、Client、Citizen、Visitor などの他のオブジェクトによって使用できます。これがコードを分割して再利用するための優れた方法であることに気づいたかもしれません。 Human オブジェクトを扱う場合、異なるオブジェクトを 1 つずつ再作成するのではなく、Human を継承して既存のプロパティを使用するだけで済みます。また、「ミドルネーム」属性を追加したい場合は一度追加するだけで、Humanクラスを継承しているものはすぐに利用することができます。逆に、「ミドルネーム」属性をオブジェクトに追加したいだけの場合は、Human クラスに追加せずに、そのオブジェクトに直接追加できます。
1. パブリックとプライベート
次のトピックでは、クラスのパブリック変数とプライベート変数について話したいと思います。オブジェクト内でのデータの処理方法に応じて、データはプライベートまたはパブリックとして扱われます。私有財産は、必ずしも他人がアクセスできないことを意味するものではありません。おそらく、特定の方法のみを使用する必要があります。
● 読み取り専用
オブジェクトの作成時に値だけが必要な場合があります。作成したら、他の人にこの値を変更させたくないでしょう。これを行うには、プライベート変数を作成し、インスタンス化中にそれに値を割り当てます。
function Animal(type) {
var data = [];
data['type'] = type;
this.getType = function () {
return data['type'];
}
}

varふわふわ= new Animal('dog');
fluffy.getType(); // Return 'dog'
この例では、Animal クラスにローカル配列データが作成されます。 Animal オブジェクトがインスタンス化されると、 type の値が渡され、その値がデータ配列に配置されます。プライベートであるため、値を上書きすることはできません (Animal 関数がそのスコープを定義します)。オブジェクトがインスタンス化されると、型値を読み取る唯一の方法は getType メソッドを呼び出すことです。 getType は Animal で定義されているため、Animal によって生成されたクロージャを使用してデータを入力できます。この場合、オブジェクトの型を読み取ることはできますが、変更することはできません。
非常に重要な点の 1 つは、オブジェクトが継承される場合、「読み取り専用」テクノロジーは使用できないということです。継承が実行された後、インスタンス化された各オブジェクトはそれらの読み取り専用変数を共有し、その値を上書きします。最も簡単な解決策は、クラス内の読み取り専用変数をパブリック変数に変換することです。ただし、それらは非公開にしておく必要があります。フィリップがコメントで言及したテクニックを使用できます。
●パブリック
もちろん、特定の属性の値を自由に読み書きしたい場合もあります。これを実現するには、this 演算子を使用します。
function Animal() {
this.mood = '';
}
var Fluffy = new Animal();
Fluffy.mood = 'happy';
Fluffy.mood // 今度は 'happy' を返します
;このクラスは、自由に読み書きできる、mood と呼ばれるプロパティを公開します。同様に、前の例の getType 関数などの関数をパブリック プロパティに割り当てることができます。 getType に値を代入しないように注意してください。代入しないと、値が破棄されてしまいます。
完全にプライベート
最後に、完全にプライベートなローカル変数が必要であることがわかるかもしれません。こうすることで、パブリック メソッドを作成せずに、最初の例と同じパターンを使用できます。
function Animal() {
var Secret = "You'll Never know!"
}

var purple = new Animal();
2. 柔軟な API を作成します
クラスの作成について説明しました。製品要件との一貫性を保つことは同期的に変化するため、コードが古くならないようにする必要があります。すでにいくつかのプロジェクトを実行したり、製品を長期間保守したりしたことがある場合は、要件が変化することを知っておく必要があります。これは議論の余地のない事実です。そう考えないと、コードは書かれる前に駄目になってしまいます。タブのコンテンツを突然アニメーション化したり、Ajax 呼び出しを通じてデータを取得したりする必要が突然必要になる場合があります。未来を正確に予測することは不可能ですが、将来の緊急事態に備える柔軟なコードを記述することは可能です。
● Saner パラメータ リスト
パラメータ リストを設計するときに、コードを前向きにすることができます。パラメーター リストは、他のユーザーがコードを実装するための主な連絡先であり、適切に設計されていない場合、非常に問題が発生する可能性があります。次のようなパラメータ リストは避けてください:
function Person(employeeId, fname, lname, tel, FAX, email, email2, dob) {
};
このクラスは非常に脆弱です。コードを公開した後にミドルネームパラメータを追加する場合は、順序の問題によりリストの最後に追加する必要があります。これでは仕事が面倒になります。各パラメータに値を割り当てないと、非常に困難になります。例:
var ara = new Person(1234, "Ara", "Pehlivanian", "514-555-1234", null, null, null, "1976-05-17");
パラメーター リストを操作するためのより適切で柔軟な方法は、次のパターンを使用することです:
function Person(employeeId, data) {
};
最初のパラメーターは必須であるため、最初のパラメーターがあります。残りはオブジェクトに混ぜて柔軟に使用できます。
var ara = 新しい人物(1234, {
fname: "Ara",
lname: "Pehlivanian",
tel: "514-555-1234",
dob: "1976-05-17"
});
このパターンの利点は、読みやすく、柔軟性が高いことです。 FAX、電子メール、および電子メール 2 は完全に無視されることに注意してください。それだけでなく、オブジェクトは特定の順序ではないため、都合の良い場所にミドルネームパラメータを追加するのは非常に簡単です:
var ara = new Person(1234, {
fname: "Ara",
mname: "Chris",
lname: "Pehlivanian",
tel: "514-555-1234",
dob: "1976-05-17"
});
クラス内の値は次からアクセスできるため、重要ではありません。インデックス:
function Person(employeeId, data) {
this.fname = data['fname'];
};
data['fname'] が値を返す場合、その値は設定されます。そうでなければ、正しく設定されていなくても、損はありません。
● コードを埋め込み可能にする
時間の経過とともに、製品要件によりクラスの動作がさらに必要になる場合があります。ただし、この動作はクラスのコア機能とは何の関係もありません。また、別のタブから外部データを取得するときに、あるタブのパネル内のコンテンツをグレー表示にするなど、クラスの唯一の実装になる場合もあります。これらの関数をクラス内に置きたいと思うかもしれませんが、それらはそこには属しません。タブ ストリップの役割は、タブを管理することです。アニメーション化とデータの取得はまったく異なるものであり、タブ ストリップのコードから分離する必要があります。追加の機能を排除せずにタブ ストリップを将来にわたって使用できる唯一の方法は、動作をコードに埋め込むことです。つまり、イベントを作成し、それをコード内の重要な瞬間 (onTabChange、afterTabChange、onShowPanel、afterShowPanel など) にフックします。そうすれば、onShowPanel イベントに簡単にフックして、パネルのコンテンツをグレー表示にするハンドラーを作成でき、誰もが満足できます。 JavaScript ライブラリを使用すると、これを簡単に行うことができますが、自分で記述するのはそれほど難しくありません。以下は YUI 3 を使用した例です。

< script type="text/javascript">
YUI().use('event', function (Y) {

function TabStrip() {
this.showPanel = function () {
This.fire('onShowPanel' ; common Y.Augment(Y.EventTarget)をトリガーする能力をタブストリップします。 // パネルを表示する前に行うべきその他の作業}}); 次に行うこと
);この例には、showPanel メソッドを備えた単純な TabStrip クラスがあります。このメソッドは、onShowPanel と afterShowPanel という 2 つのイベントを起動します。この機能は、Y.EventTarget を使用してクラスを拡張することで実現されます。それが完了したら、TabStrip オブジェクトをインスタンス化し、それに一連のハンドラーを割り当てます。これは、現在のクラスを混乱させることなく、インスタンスの動作のみを処理するための一般的なコードです。
まとめ
同じページ上、同じ Web サイト内、またはプロジェクト間でコードを再利用する予定がある場合は、コードをパッケージ化してクラス内に整理することを検討してください。オブジェクト指向 JavaScript は、自然にコードの編成とコードの再利用を容易にします。さらに、少し先見の明があれば、コードを作成した後も長く使用できる柔軟性を確保することができます。再利用可能で将来性のある JavaScript コードを作成すると、あなた、あなたのチーム、会社の時間とお金が節約されます。これは間違いなくヒットします。

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

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 Dec 17, 2023 am 08:41 AM

JavaScript は Web 開発で広く使用されているプログラミング言語であり、WebSocket はリアルタイム通信に使用されるネットワーク プロトコルです。 2 つの強力な機能を組み合わせることで、効率的なリアルタイム画像処理システムを構築できます。この記事では、JavaScript と WebSocket を使用してこのシステムを実装する方法と、具体的なコード例を紹介します。まず、リアルタイム画像処理システムの要件と目標を明確にする必要があります。リアルタイムの画像データを収集できるカメラ デバイスがあるとします。

See all articles