ホームページ >ウェブフロントエンド >jsチュートリアル >オブジェクトを作成するためのモードは何ですか?
まず Object インスタンスを作成し、次にそれにプロパティとメソッドを追加します
var Person = new Object() Person.name = 'hl' Person.sayName = function () { console.log(this.name) }
オブジェクト リテラル メソッドは、オブジェクトを作成するための最も速くて便利な方法であり、多くのオブジェクトで使用されますシナリオ。
var Person = { name: 'hl', sayName: function () { console.log(this.name) } }
オブジェクト リテラル メソッドの欠点は、同じ型の複数のオブジェクトを作成するときに、大量の重複コードが生成されるため、ファクトリ パターンになることです。
ファクトリ パターンは、関数を使用してオブジェクト作成の詳細をカプセル化し、関数を呼び出すときにオブジェクトのプロパティを渡してオブジェクトを返します。
function createPerson (name) { return { name: name, sayName: function () { console.log(this.name) } } } var person = createPerson('hl') var person = new createPerson('hl') // 寄生构造函数模式
new 演算子を使用しても同じ結果が得られます。このメソッドは寄生コンストラクター パターンと呼ばれ、関数を直接呼び出すのと何ら変わりません。
ファクトリ パターンは、同じタイプの複数のオブジェクトを作成する問題を解決しますが、オブジェクトの特定のタイプを識別することはできません。
コンストラクターを通じて作成されたオブジェクトの場合、instanceof 演算子を使用してオブジェクトのタイプを決定できます。プログラミング規約に従って、コンストラクター名は通常の関数と区別するために大文字にする必要があります。
function Person (name) { this.name = name this.sayName = function () { console.log(this.name) } } p = new Person('hl') p instanceof Person // true造のコンストラクタの特徴:
function Person () { } var p = new Person() Person.prototype.name = 'hl' Person.prototype.sayName = function () { console.log(this.name) } p.sayName() // hlプロトタイプは動的です。つまり、最初にオブジェクトが作成され、次にプロトタイプが変更され、インスタンスは対応するプロパティとメソッドを取得することもできます。
function Person () { } Person.prototype.relative = ['father','mother'] var person1 = new Person() var person2 = new Person() person1.relative.push('sister') console.log(person2.relative) // [ 'father', 'mother', 'sister' ]
person1 の属性を変更すると、person2 の属性も変更されます。通常、インスタンスは独自の属性を持つ必要があるため、プロトタイプ パターンが単独で使用されることはほとんどありません。
6 コンストラクター パターンとプロトタイプ パターンを組み合わせて使用する
function Person (name) { this.name = name } Person.prototype.sayName = function () { console.log(this.name) }7 動的プロトタイプ パターン プロトタイプをコンストラクターで初期化し、オブジェクト作成プロセスをより適切にカプセル化できます。
function Person(name) { this.name = name if (typeof this.sayName !== 'function') { Person.prototype.setName= function (name) { this.name = name } Person.prototype.sayName = function () { console.log(this.name) } } }if を使用してすべてのプロパティまたはメソッドをチェックするのではなく、プロトタイプの初期化後に存在するはずのプロパティまたはメソッドの 1 つだけをチェックします。 8 安全なコンストラクター パターン 安全なオブジェクトとは、パブリック プロパティを持たず、そのプロパティとメソッドがこのオブジェクトを参照せず、オブジェクトの作成に new 演算子が使用されないことを意味します。データの変更を防ぐためのセキュリティが必要な一部の環境での使用に適しています。
function Person (name) { return { sayName: function () { console.log(name) } } } var person = Person('hl')セーフ モードで作成されたオブジェクトには、コンストラクターで定義されたメソッドを使用する以外に、コンストラクターに渡された元のデータを変更したりアクセスしたりする方法はありません。
以上がオブジェクトを作成するためのモードは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。