ホームページ ウェブフロントエンド jsチュートリアル JavaScript カスタム タイプ_JavaScript スキル

JavaScript カスタム タイプ_JavaScript スキル

May 16, 2016 pm 05:53 PM
カスタムタイプ

1. パターンを直接作成します。これは最も単純で簡単なパターンです。最初に参照型のオブジェクトを作成し、それにカスタム プロパティとメソッドを追加します。サンプル コードは次のとおりです。

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

var person = new Object();
person.name = "サム";
person.speak = function(){
alert(this.name) age "year old") ;
}
person.speak();

ご覧のとおり、上で Object 型のオブジェクトが作成され、次に name 属性と age 属性が作成されます。とspeakメソッドが追加されます。パターンを直接作成するのは簡単ですが、その欠点は明らかです。同じオブジェクトを多数作成する必要がある場合、毎回コードを繰り返し書かなければなりません。この問題を解決するには、オブジェクトを作成するプロセスをカプセル化することができるため、次のファクトリ パターンを用意します。
2. ファクトリーモード。ファクトリ パターンは、プログラミングでよく使用されるデザイン パターンで、主にオブジェクトの作成プロセスをカプセル化します。サンプル コードは次のとおりです。


function createperson(name, age){
var person = new Object();
person.name = name; 🎜 >person.age = age;
person.speak = function(){
alert(this.name " is " this.age " years old");
return person; 🎜 >}
var person1 = createperson("Sam", 16);
var person2 = createperson("Jack", 18);


ファクトリ パターンを使用した後、同じ型のオブジェクトがよりシンプルになります。しかし、ファクトリ パターンではオブジェクトの識別の問題は解決されません。つまり、作成されたオブジェクトの特定のタイプを決定することができません。オブジェクト指向プログラミングの経験のある開発者は、オブジェクトの作成はクラスに基づいて行う必要があることを知っています。特定のカスタム クラスを取得したら、そのクラスのオブジェクトを作成できます。幸いなことに、JavaScript では、コンストラクター パターンを通じてクラスをシミュレートできます。
3. コンストラクターパターン。コンストラクターと通常の関数の間に違いはありません。 new 演算子が使用されている限り、任意の通常の関数をコンストラクターとして使用できます。また、任意のコンストラクターを通常の関数として呼び出すこともできます。ただし、JavaScript では、コンストラクターとして使用される関数名の最初の文字を大文字にする必要があるという規則があります。サンプル コードは次のとおりです。




コードをコピー
コードは次のとおりです。 function person(name, age){ this.name = name; this.speak = function(){
alert(this.name "は " .age "歳" );
}
}
var person1 = 新しい人("サム", 16)
var person2 = 新しい人("ジャック", 18); >

ご覧のとおり、コンストラクター内でこれを使用してプロパティとメソッドを追加しています。 Person オブジェクトを作成するとき、これは作成されたオブジェクトを指します。これで、オブジェクト person1 と person2 の特定のタイプを識別できるようになりました。 alert(person1 instanceOf Person) を使用すると、出力値が true であることがわかります。ただし、コンストラクター パターンには独自の欠点もあります。つまり、コンストラクター内で宣言されたメソッドは、新しいオブジェクトが作成されるたびに再作成されます (JavaScript では、関数もオブジェクトです)。つまり、コンストラクター内のメソッドは、クラスではなくオブジェクトにバインドされます。以下のコードの出力で推論を検証できます。
alert(person1.speak == person2.speak); // false この欠点を解決する比較的簡単な方法は、関数宣言をコンストラクターの外側に置くことです。つまり、




コードをコピー


コードは次のとおりです。function speech(){
alert(this.name "は " this.age " 歳です");
}
var person1 = 新しい人物("サム", 16);
var person2 = 新しい人物("ジャック", 18)
alert(person1.speak == person2.speak); ; // 真


問題は解決されましたが、この方法では新たな問題が生じます。まず、関数 speech はグローバル スコープで宣言されていますが、グローバル スコープに配置すると誤用の危険性があります。次に、カスタム タイプに多くのメソッドがある場合、次のようにする必要があります。多くのグローバル関数を宣言すると、グローバル スコープの汚染につながるだけでなく、コードのカプセル化にも役立ちません。それでは、グローバル スコープを汚さずにクラスにバインドされたカスタム型メソッドを作成する方法はあるのでしょうか?答えは、プロトタイプ パターンを使用することです。
4. プロトタイプモード。新しい関数を宣言すると、その関数 (JavaScript では関数もオブジェクトです) はプロトタイプ属性を持ちます。プロトタイプは、この関数によって作成されたすべてのオブジェクトが所有するパブリック プロパティとメソッドを表すオブジェクトです。サンプル コードは次のとおりです。

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

function person(){ }
person.prototype.name="サム";
person.prototype.age=16;
person.prototype.speak = function(){
alert( this.name "は " この .age " 歳です");
}
var person1 = new Person();
var person2 = new Person();
alert(person1. speech == person2.speak); // true


speak メソッドはコンストラクターで宣言されていませんが、作成したオブジェクト person1 がこれは、JavaScript には検索ルールがあるため、最初にインスタンスの属性とメソッドを検索し、見つからない場合はそれらを返し、プロトタイプ内を検索します。プロトタイプ パターンでは、メソッドがクラスに関連付けられ、グローバル スコープを汚染しませんが、独自の欠点もあります。まず、すべてのプロパティもクラスに関連付けられます。つまり、すべてのオブジェクトがプロパティを共有することになります。これは明らかに不合理です。 ; 次に、初期化データをコンストラクターに渡す方法がありません。解決策は簡単で、コンストラクター パターンとプロトタイプ パターンを組み合わせて使用​​するだけです。
5. 組み合わせモード。サンプル コードは次のとおりです。


コードをコピー コードは次のとおりです。
関数 人(名前, 年齢){
この.名前 = 名前;
この.年齢 = 年齢;
人.prototype.speak = function(){
アラート(この.name "は " この .age " 歳です");
var person1 = new person();
var person2 = new person(); 🎜>alert(person1.speak == person2.speak); // true


組み合わせモードがすべてのニーズを満たしていることを見つけるのは難しくありません。また、それは現在使用されているモードでもあります。広く使用されています。オブジェクト指向プログラミングの経験のある開発者にとっては、プロトタイプ宣言をコンストラクターの外に置くのは少し面倒に感じるかもしれませんが、コンストラクターの中に置くことはできますか?答えは「はい」です。動的結合モードを使用してください。
6. ダイナミック結合モード。原則として、まずプロトタイプ内の特定の属性またはメソッドが宣言されているかどうかを判断し、宣言されていない場合はプロトタイプ全体を宣言し、何も実行しません。サンプル コードは次のとおりです。




コードをコピー
コードは次のとおりです。 関数 人(名前, 年齢){ この.名前 = 名前; この.年齢 = 年齢;
if (人.prototype.speak == "未定義"){
人.プロトタイプ.speak = function() {
alert(this.name "は " this.age " 歳です")
}
}
}

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

Video Face Swap

Video Face Swap

完全無料の 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++ 関数の要件は何ですか? Apr 19, 2024 pm 03:33 PM

C++ 関数は、次の要件を満たすカスタム型を返すことができます。 型は完全に定義されています。デフォルトのコンストラクター。値型にはコピー コンストラクターが必要です。

Go言語を使用してカスタムタイプを定義および使用するにはどうすればよいですか? Go言語を使用してカスタムタイプを定義および使用するにはどうすればよいですか? Jun 05, 2024 pm 12:41 PM

Go では、type キーワード (構造体) を使用してカスタム型を定義し、名前付きフィールドを含めることができます。フィールド アクセス演算子を介してアクセスでき、インスタンスの状態を操作するためのメソッドをアタッチできます。実際のアプリケーションでは、複雑なデータを整理し、操作を簡素化するためにカスタム型が使用されます。たとえば、学生管理システムはカスタム タイプ Student を使用して学生情報を保存し、平均成績と出席率を計算する方法を提供します。

Golangでカスタムタイプの値を比較するにはどうすればよいですか? Golangでカスタムタイプの値を比較するにはどうすればよいですか? Jun 05, 2024 pm 01:04 PM

Golang では、同じ基になる表現を持つ型に対して == 演算子を直接使用することで、カスタム型の値を比較できます。より複雑な型の場合は、reflect.DeepEqual 関数を使用して、2 つの値の内容全体を再帰的に比較します。

Golang で不変のカスタム型を作成するにはどうすればよいですか? Golang で不変のカスタム型を作成するにはどうすればよいですか? Jun 02, 2024 am 09:41 AM

はい、Go で不変のカスタム型を作成すると、スレッド セーフ、推論の容易さ、より強力なエラー処理など、多くの利点が得られます。不変型を作成するには、次の手順に従う必要があります。 型を定義します。メンバー変数を含み、ポインターを含めないカスタム型を宣言します。不変性を宣言する: すべてのメンバー変数が基本型または他の不変型であることを確認し、スライス、マップ、またはポインターの使用を避けてください。値レシーバー メソッドを使用する: 型に関連付けられたメソッドに値レシーバーを使用し、構造リテラルの割り当てを禁止し、メソッドがそれ自体に対してのみ動作するように強制します。

Golang を使用するときにカスタム型をシリアル化するにはどうすればよいですか? Golang を使用するときにカスタム型をシリアル化するにはどうすればよいですか? Jun 03, 2024 pm 05:07 PM

Go では、カスタム型をシリアル化する方法は次のとおりです。JSON シリアル化を使用する場合は json.Marshaler インターフェイスを実装し、Gob シリアル化を使用する場合はエンコーディング/gob パッケージに GobEncoder および GobDecoder インターフェイスを実装します。

Golang でカスタム型の演算子をオーバーロードするにはどうすればよいですか? Golang でカスタム型の演算子をオーバーロードするにはどうすればよいですか? Jun 02, 2024 am 09:26 AM

Go では、型と同じ名前のメソッドを作成し、別の型インスタンスを受け取り、同じ型の結果を返すことによって演算子をオーバーロードすることで型をカスタマイズできます。このようにして、カスタム演算子を組み込み演算子と同じように使用できるため、コードの使いやすさと読みやすさが向上します。

Go でカスタム型を実装するにはどうすればよいですか? Go でカスタム型を実装するにはどうすればよいですか? May 10, 2023 pm 03:34 PM

Go はオブジェクト指向の静的に型指定されたプログラミング言語であるため、開発者はカスタム型を通じてコードを簡素化し、可読性を向上させることができます。この記事では、開発者がこの機能をより有効に活用できるように、Go でカスタム型を実装する方法を検討します。構造 Go の構造は、開発者が異なる型の変数を組み合わせてより複雑なデータ構造を実装できるようにするカスタム型です。構造体の例を次に示します。 typePersonstruct{name

Go 言語のカスタム型メソッドの詳細 Go 言語のカスタム型メソッドの詳細 Mar 24, 2024 am 09:45 AM

Go 言語でのカスタム タイプ メソッドの詳細な探索 Go 言語では、カスタム タイプにメソッドを追加して、カスタム タイプの機能を拡張できます。型のメソッドを定義することで、オブジェクト指向プログラミングの特性を実装し、コードをよりモジュール化して保守しやすくすることができます。この記事では、Go 言語でのカスタム型メソッドの使用について詳しく説明し、具体的なコード例を示します。 1. カスタム型メソッドとは何ですか? Go 言語では、構造体にメソッドを定義することでカスタム型メソッドを実装できます。これらの方法では、

See all articles