1.Object构造函数模式
var obj = new Object();
obj.name = 'Tom';
obj.age = 11;
obj.setName = function(name){
this.name = name;
}
适用场景:创建对象起始时候不确定对象内部的数据
问题:语句太多
2.对象字面量模式
var p = {
name:'Tom',
age:'11',
setName:function(){
this.name = name;
}
}
var p1 = {
name:'Jack',
age:'15',
setName:function(){
this.name = name;
}
}
适用场景:创建对象时就知道内部需要哪些属性,同类型对象只创建一个
问题:创建同类型的多个对象时候,要重复定义这些相同的属性和方法
3.工厂模式(很少用)
function createPerson(name,age){
var obj = {
name:name,
age:age,
setName:function(name){
this.name = name;
}
}
return obj;
}
使用场景:同类型对象需要创建多个
问题:返回的对象都是Object类型,没有具体的类型
4.自定义构造函数模式
function Person(name,age){
this.name = name;
this.age = age;
this.setName = function(name){
this.name = name;
}
}
var p = new Person('Tom',11);
var p1 = new Person('Jack',15);
适用场景:需要创建多个类型确定的对象
问题:创建的对象的方法是相同的重复数据
5.构造函数+原型的组合模式
function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype.setName(name){//这样设置所有的对象的方法都去原型链上面找,最后都找到Person.prototype对象上,就不会存在每个对象都要花费内存来再属性上存一个相同的方法
this.name = name;
}
var p = new Person('Tom',11);
var p1 = new Person('jack',15);
适用场景:需要创建多个具体类型的对象