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)
适用场景: 需要创建多个类型确定的对象。