まず 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) }
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) } } }
function Person (name) { return { sayName: function () { console.log(name) } } } var person = Person('hl')
以上がオブジェクトを作成するためのモードは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。