1.組み込みのコンストラクターの作成
次の方法で直接new Object()
作成。
//在js中,对象有动态特性,可以随时的给一个对象增加属性或者删除属性。
let person = new Object()
person.name = 'Jack'
person.age = 18
person.sayName = function () {
console.log(this.name)
}
短所:面倒で、すべてのプロパティを追加する必要があります。
2.オブジェクトリテラルの作成
let person = {
name: 'Jack',
age: 18,
sayName: function () {
console.log(this.name)
}
}
短所:複数のオブジェクトをバッチで生成する場合はどうなりますか?コードは冗長です
3.単純な改善:ファクトリ機能
// 我们可以写一个函数,解决代码重复问题:
function createPerson (name, age) { // 第一种写法
return {
name: name,
age: age,
sayName: function () {
console.log(this.name)
}
}
}
// 然后生成实例对象:
let p1 = createPerson('Jack', 18)
let p2 = createPerson('Mike', 18)
function setObj(name, age) { // 第二种写法
let obj = new Object()
obj.name = name
obj.age = age
return obj
}
let obj1 = setObj('jack', 20)
console.log(obj1);
短所:ただし、オブジェクト認識の問題は解決されず、作成されたオブジェクトのタイプはObjectです。
4.改善を続ける:コンストラクター
コンストラクターは、オブジェクトをインスタンス化する関数でありnew
、。
function Person (name, age) {
this.name = name
this.age = age
this.sayName = function () {
console.log(this.name)
}
}
var p1 = new Person('Jack', 18)
p1.sayName() // => Jack
var p2 = new Person('Mike', 23)
p2.sayName() // => Mike
Person
インスタンスを作成するには、new
演算子を使用する必要があります。この方法でコンストラクターを呼び出すと、次の4つの手順が実行されます。newは正確に何をしますか。
新しいオブジェクトを作成します(コンストラクターはオブジェクトを初期化するためのものです)
コンストラクターのスコープを新しいオブジェクトに割り当てます(作成されたオブジェクトのアドレスをコンストラクターでこれに割り当てます)
コンストラクターでコードを実行します(コンストラクターを呼び出して、オブジェクトにメンバーを追加します)
新しいオブジェクトを返します(このアドレスをobjに返します)
コンストラクターは、意味を成すため
new
にます。コンストラクターの最初の文字は通常大文字です。
気をつけて:
1.戻り値を手動で追加した場合、それが基本型であれば、コンストラクターの機能には影響しません。
2.オブジェクトが返されると、上書きされます
3. newを削除すると、通常の機能になります
コンストラクターのデメリット
コンストラクターを使用する最大の利点は、オブジェクトを作成する方が便利なことですが、メモリを浪費するという問題もあります。
function Person (name, age) {
this.name = name
this.age = age
this.type = 'human'
this.say = function () {
console.log('hello ' + this.name)
}
}
var person1 = new Person('lpz', 18)
var person2 = new Person('Jack', 16)
console.log(person1.say === person2.say) // => false
解決策:同じsay
メソッド
メモリを浪費することの欠点を解決する
しかし
污染全局变量
、の
// 提前将say 声明好
function say() {
console.log(this.name);
}
function createStudent(name, age) {
this.name = name;
this.age = age;
this.say = say
}
const obj = new createStudent("悟能", 83);
const obj1 = new createStudent("悟能1", 84);
console.log(obj.say === obj1.say); // true