Object构造函数模式
套路:先创建空的Object对象,再动态添加属性方法
适用场景:起始时不确定对象内部数据
问题:语句太多
例:
var p1 = new Object()
p1.name = 'Tom'
p1.age = 12
p1.setName = function (name) {
this.name = name
}
console.log(p1.name,p1.age) //Tom 12
p1.setName('Bob')
console.log(p1.name,p1.age) //Bob 12
对象字面量模式
套路:使用{}创建对象,同时指定属性方法
适用场景:起始时对象内部数据是确定的
问题:如果创建多个对象,有重复的代码
例:
var p2 = {
name:'Tom',
age:13,
setName:function(name) {
this.name = name
}
}
console.log(p2.name,p2.age) //Tom 13
p2.setName('Jack')
console.log(p2.name,p2.age) //Jack 13
工厂模式
套路:通过工厂函数动态创建并返回
适用场景:需要创建多个对象
问题:对象没有一个具体的类型,都是Object类型
例:
function createPerson(name,age) {
var p3 = {
name:name,
age:age,
setName:function(name) {
this.name = name
}
}
return p3
}
var person1 = createPerson('Tom',45)
var person2 = createPerson('Bob',54)
console.log(person1.name) //Tom
person1.setName('Jack')
console.log(person1.name) //Jack
自定义构造函数模式
套路:自定义构造函数,通过new创建对象
适用场景:需要创建多个类型确定的对象
问题:每个对象都有相同的数据,浪费内存
例:
function Person(name,age) {
this.name = name
this.age = age
this.setName = function(name) {
this.name = name
}
}
var p4 = new Person('Tom',19)
console.log(p4.name,p4.age) //Tom 19
p4.setName('Bob')
console.log(p4.name,p4.age) //Bob 19
构造函数+原型的组合模式
套路:自定义构造函数,属性在函数中初始化,方法添加到原型上
适用场景:需要创建多个类型确定的对象
例:
function Student(name,age) {
this.name = name
this.age = age
}
Student.prototype.setName = function(name) {
this.name = name
}
var p5 = new Student('Tom',90)
console.log(p5.name,p5.age) //Tom 90
p5.setName('Bob')
console.log(p5.name,p5.age) //Bob 90