对象创建模式 - js对象高级
Object构造函数模式
-
方式:先创建空对象,再动态添加属性/方法
-
适用场景:起始时不确定对象内部数据
-
问题:语句多
var p = new Object()
p.name = 'Tom'
p.age = 12
p.setName = function (name) {
this.name = name
}
对象字面量模式
-
方式:使用{}创建对象,同时指定属性/方法
-
适用场景:起始时对象内部数据是确定的
-
问题:如果创建多个对象,有代码重复
var p = {
name = 'Tom'
age = 12
setName = function (name) {
this.name = name
}
}
工厂模式
-
方式:通过工厂函数动态创建对象并返回
-
适用场景:需要创建多个对象
-
问题:对象没有一个具体的类型都是Object类型
function createPerson (name, age){
var obj = {
name: name,
age: age,
setName: function (name) {
this.name = name
}
}
return obj
}
> 返回一个对象的函数叫做工厂函数
自定义构造函数模式
-
方式:自定义构造函数,通过new创建对象
-
适用场景:需要创建多个类型的确定对象
-
问题:每个对象都有相同的数据,浪费内存
// 定义类型
function Person (name, age) {
this.name = name
this.age = age
this.setName = function (name) {
this.name = name
}
}
var p1 = new Person('Tom', 12)
var p2 = new Person('Jack', 15) //二者方法相同
console.log(p1 instanceof Person) //true
构造函数 + 原型的组合模式
-
方式:自定义构造函数,属性在函数中初始化,方法添加到原型上
-
适用场景:需要创建多个类型的确定对象
function Person (name, age) {
this.name = name
this.age = age
}
Person.prototype.setName = function (name) {
this.name = name
}
var p1 = new Person('Tom', 23)
var p2 = new Person('Jack', 24)

浙公网安备 33010602011771号