工厂模式:就是把参数传进去后。进过一系列的处理。然后得到想要的结果。然而。他这样会很消耗资源。每一次的创建都会创建空间。也就是user.speak=function这边。这样会降低性能。
构造函数也叫混合模式。是通过prototype方法把需要添加的函数在外部添加。也就是不论实例化多少的对象。也不会占用空间。不会消耗性能。
虽然Object构造函数或对象字面量都可以创建单个对象,但是这些方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量重复的代码。为了解决这个问题,就可以使用工厂模式来创建对象。
1.工厂模式:
在ECMAScript中是无法创建类的,开发人员就发明了一种函数,用函数来封装特定接口创建对象的细节。
function createPerson(name, age, job) {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
sayName = function () {
alert(this.name);
};
return o;
}
var person1 = createPerson('zxj', 23, "Software Engineer");
var person2 = createPerson('sdf', 25, "Software Engineer");
在示例中我们可以看到,工厂模式虽然解决了创建多个相似对象的问题,但没有解决对象识别的问题(在示例中,得到的都是o对象,对象的类型都是Object)。
2.构造模式:
ECMAScript中的构造函数可以用来创建特定类型的对象。像Object和Array的原生的构造函数,在运行时会自动出现在执行环境中。此外,也可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法。代码如下所示:
function createPerson(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
sayName = function () {
alert(this.name);
};
}
var person1 = new Person('zxj', 23, "Software Engineer");
var person2 = new Person('sdf', 25, "Software Engineer");
给你看个例子
稳妥构造函数模式的写发
function person(name,age,sex){
var o=new Object();
o.name=name;
o.age=age;
o.sex=sex;
o.sayName=function(){
console.log(name);
}
return o;
}
var haj=person("haj",29,"M");
haj.sayName();//haj
haj.name="haj1";
haj.sayName();//haj
console.log(haj.name);//haj1
上面修改了haj.name的属性 但是下面的sayName方法并没有改变值
再看看工厂模式
function person(name,age,sex){
var o=new Object();
o.name=name;
o.age=age;
o.sex=sex;
o.sayName=function(){
console.log(this.name);//这里用了this,sayName方法调用的值会变
}
return o;
}
着就是工厂模式和稳妥构造函数的区别吧!