初期作成方法var obj = 新しいオブジェクト() オブジェクト名 = 'xxx' オブジェクト年齢 = 18 またはオブジェクトリテラルvar o1 = {を使用します 名前: 'xxx', 言う: () => {} } var o2 = { 名前: 'xxx', 言う: () => {} } デメリット: 同じインターフェースを使用して多くのオブジェクトを作成すると、重複するコードが大量に生成される ファクトリーパターン関数ファクトリー(名前,年齢) { var obj = 新しいオブジェクト() obj.name = 名前 obj.age = 年齢 オブジェクトを返す } var o1 = ファクトリー(1, 11) var o2 = ファクトリー(2, 22) 利点: 複数の類似オブジェクトを作成するコード重複の問題を解決します。欠点: オブジェクトの種類を識別できません。 コンストラクターパターンECMAScript では、Object や Array などのネイティブ コンストラクターなど、特定のタイプのオブジェクトを作成するためにコンストラクターを使用できます。さらに、カスタム コンストラクターを作成して、カスタム オブジェクトのプロパティとメソッドを定義することもできます。 関数 Person(名前, 年齢) { this.name = 名前 this.age = 年齢 this.sayName = 関数() { console.log(この名前) } } var o1 = 新しいPerson(1,11) var o2 = 新しいPerson(2,22) o1.名前を言う() // 1 o2.名前を言う() // 2 利点: コンストラクターモードで作成されたインスタンスは、型識別子を区別できます (instanceof 判断) コンストラクタパターンの最適化関数 Person(名前, 年齢) { this.name = 名前 this.age = 年齢 } 関数 sayName() { console.log(この名前) } var o1 = 新しいPerson(1,11) var o2 = 新しいPerson(2,22) o1.名前を言う() // 1 o2.名前を言う() // 2 利点: 複数のインスタンスがグローバル スコープで定義された関数を共有するため、2 つの関数が同じことを実行するという問題が解決されます。欠点: グローバル スコープで定義された関数は、実際には特定のオブジェクトによってのみ呼び出すことができ、グローバル スコープの名前はその名前に値せず、オブジェクトが多数のメソッドを定義する必要がある場合は多数のグローバル関数を作成する必要があり、カスタム オブジェクト タイプにカプセル化特性がなくなります。 プロトタイプパターン作成する各関数には、オブジェクトへのポインターである prototype プロパティがあります。このオブジェクトの目的は、特定の型のすべてのインスタンスで共有できるプロパティとメソッドを含めることです。つまり、prototype はコンストラクターによって作成されたオブジェクト インスタンスのプロトタイプ オブジェクトです。 関数 Person(){} 人.プロトタイプ.名前 = '123' 人物.プロトタイプ.年齢 = 18 Person.prototype.sayName = function() { console.log(この名前) } var o1 = 新しいPerson(1,11) var o2 = 新しいPerson(2,22) o1.名前を言う() // 123 o2.名前を言う() // 123 利点: インスタンスがプロパティやイベントを共有する問題を解決します。 欠点: インスタンスはプロパティを共有するため、値が参照型であるプロパティの場合、1 つのインスタンスを変更すると、他のインスタンスがアクセスする値も変更されます。のように: 関数 Person(){} 人.プロトタイプ.名前 = '123' 人物.プロトタイプ.年齢 = 18 Person.prototype.friends = ['a', 'b'] Person.prototype.sayName = function() { console.log(この名前) } var o1 = 新しいPerson(1,11) var o2 = 新しいPerson(2,22) o1.friends.push('c') console.log(o2.friends) // ['a', 'b', 'c'] コンストラクタとプロトタイプパターンの組み合わせ関数 Person(名前, 年齢) { this.name = 名前 this.age = 年齢 this.friends = ['a'] } Person.プロトタイプ = { コンストラクタ: Person, sayName: 関数() { console.log(この名前) } } var o1 = 新しいPerson(1,11) var o2 = 新しいPerson(2,22) o1.名前を言う() // 1 o2.名前を言う() // 2 利点: 各インスタンスは独自のプロパティを持ち、同時にメソッド参照を共有し、パラメータの受け渡しもサポートします。 ダイナミックプロトタイプパターン関数 Person(名前, 年齢) { this.name = 名前 this.age = 年齢 this.friends = ['a'] if(typeof this.sayName != 'function') { Person.prototype.sayName = function() { console.log(この名前) } } } var o1 = 新しいPerson(1,11) var o2 = 新しいPerson(2,22) o1.名前を言う() // 1 o2.名前を言う() // 2 利点: メソッドが存在しない場合に一度だけ作成し、繰り返しの作成を回避します。 寄生コンストラクタパターン関数SpecialArray() { var o = 新しい配列() // 値を追加する o.push.apply(o, arguments) // メソッドを追加 o.toPipedString = function(){ this.join('|') を返します } 戻る } var o1 = 新しい特殊配列(1,11) o1.toPipedString() // 1|11 利点: 元のコンストラクタを変更せずにオブジェクトに特別なメソッドを追加します。欠点: 返されるオブジェクトはコンストラクタやコンストラクタのプロトタイプと関係がなく、メソッドはコンストラクタの外部で作成されたオブジェクトと変わりません。 安全なコンストラクタパターン関数 Person(名前) { var o = 新しいオブジェクト() // メソッドを追加 o.getName = function(){ 戻り名 } 戻る } var o1 = 新しいPerson(1) o1.getName() // 1 寄生コンストラクタとは異なり、 this および new 呼び出しは使用されません。 利点: getName 以外に名前にアクセスする方法がないため、一部の安全な環境で使用できます。 欠点: ファクトリ パターンと同様に、オブジェクトの型を識別することはできません。 上記は、js でオブジェクトを作成するさまざまな方法の詳細内容と、その長所と短所の概要です。js でのオブジェクトの作成の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Linux での MySQL 5.7.18 バイナリ パッケージのインストール チュートリアル (デフォルトの構成ファイル my_default.cnf なし)
>>: Docker Enterprise Edition を使用して独自のプライベート レジストリ サーバーを構築する
この記事ではVueを使ってプログレスバーの変更を簡単に実装してみましたので参考にしてください。具体的...
テキストファイルの内容を並べ替える使用方法: ソート + オプション + ファイル名 (複数のファイ...
目次1. Vueリスナー配列2. vueが配列の変更を監視できない状況1. Vueリスナー配列Vue...
最近、プロジェクトでは kubernetes (以下、k8s と表記、k と s の間には 8 つの...
退屈だったので、ループに関する簡単な演習をいくつかまとめてみました。JS を学び始めたばかりの方に役...
1. アイデアMySQL に 1,000,000 件のレコードを挿入するのにたった 6 秒しかかかり...
目次1. データ型1. MySQL空間データとは何か2. GeoJSONとは3. 空間データ型のフォ...
この記事では、ショッピングサイトの虫眼鏡機能を実現するためのjsの具体的なコードを紹介します。具体的...
目次1. binlogの紹介2. Binlog関連のパラメータ3. バイナリログの内容を分析するIV...
目次1. 同期の原理2. ログスタッシュ入力JDBC 3. go-mysql-elasticsear...
導入クロージャは JavaScript の非常に強力な機能です。いわゆるクロージャは関数内の関数です...
実際の開発ではポップアップウィンドウがよく使われます。CSS3を勉強していたときに、閉じることができ...
<br />オリジナル: http://www.alistapart.com/artic...
背景docker とアイデアを使用して、Java Web の開発、展開、運用までのプロセス全体を実現...
最近、次のような効果を達成する必要がある最初は、CSS3D回転を使用して記述すると、次の効果しか得ら...