JS的对象创建模式
1.Object构造函数模式
1 var person = new Object();
2
3 person.name = 'name';
4 person.age = 43;
5
6 console.log(person);
分析:
1 * 套路: 先创建空Object对象, 再动态添加属性/方法
2 * 适用场景: 起始时不确定对象内部数据
3 * 问题: 语句太多
2.对象字面量
1 var person1 = {
2 name:'person1',
3 age:41
4 }
5
6 var person2 = {
7 name:'person2',
8 age:2
9 }
分析:
1 * 套路: 使用{}创建对象, 同时指定属性/方法
2 * 适用场景: 起始时对象内部数据是确定的
3 * 问题: 如果创建多个对象, 有重复代码
3.工厂模式
1 function Person(name,age){
2
3 return {
4 name: name,
5 age: age
6 }
7 }
8
9 var person1 = new Person('person1',4);
10 var person2 = new Person('person2',5);
分析:
1 * 套路: 通过工厂函数动态创建对象并返回
2 * 适用场景: 需要创建多个对象
3 * 问题: 对象没有一个具体的类型, 都是Object类型
4.自定义构造函数模式
1 function Person(name,age){
2
3 this.name = name;
4 this.age = age;
5 }
6
7 var person1 = new Person('person1',55);
分析:
1 * 套路: 自定义构造函数, 通过new创建对象
2 * 适用场景: 需要创建多个类型确定的对象
3 * 问题: 每个对象都有相同的数据, 浪费内存
5.构造函数加原型的组合模式
1 function Person(name, age) {
2
3 this.name = name;
4 this.age = age;
5 }
6
7 Person.prototype.eat = function(){
8 console.log('person eat');
9 }
10
11 var person1 = new Person('person1', 55);
12
13 person1.eat();
分析:
1 * 套路: 自定义构造函数, 属性在函数中初始化, 方法添加到原型上
2 * 适用场景: 需要创建多个类型确定的对象