1、Object构造函数模式

所谓 Object 构造函数就是将 Object 作为构造函数,先创建一个空的 Object 对象,再动态添加属性或者方法。

//创建 Object 对象
var p = new Object()

//动态添加属性和方法
p.name = 'Tom'
p.age = 18
p.setName = function(name){
	this.name = name 
}

适用场景: 起始时不确定对象内部数据。
问题: 语句太多。

2、对象字面量模式

这是日常中最常用到的方法,使用 {} 创建对象,同时指定属性和方法。

var p = {
	name = 'Tom'
	age = 18
	setName: function(name){
		this.name = name
	}
}

适用场景: 起始时对象内部数据是确定的。
问题: 创建多个对象时,会产生重复代码。

3、工厂模式

通过工厂函数动态创建对象并返回。

function createPerson(name,age){
	var obj = {
		name: name,
		age: age,
		setName: function(name){
		this.name = name
		}
	}
	return obj
}

var p1 = createPerson('Tom',18)

适用场景: 需要创建多个对象。
问题: 对象没有一个具体的类型,都是Object类型。

4、自定义构造函数模式

与object构造函数模式类似,通过自定义一个构造函数,再进行new操作创建对象

function Person(name, age){
	this.name = name
	this.age = age
	this.setName = function(name){
		this.name = name
	}
}

var p1 = new Person('Tom',18)

适用场景: 需要创建多个类型确定的对象。
问题: 每个对象都有相同的数据,浪费内存。

5、构造函数+原型的组合模式

自定义构造函数,属性在函函数中初始化,方法添加到原型上。

function Person(name, age){
	this.name = name
	this.age = age
}

Person.prototype.setName = function(name){
	this.name = name
}

var p1 = new Person('Tom',18)

适用场景: 需要创建多个类型确定的对象。