js中构造函数和工厂函数的区别

如题所述

构造函数与工厂函数之间差异:
1.工厂函数需要创建对象,以及必须有返回值
2.工厂函数针对的都是Object的对象模型,而构造函数可以匹配自定义的对象模型
即前者不论创建什么都只有一个xx instanceof Object
而后者根据自定义名而定类型,如上举例所示
3.构造函数弊端,如果在全局中定义相同的局部变量,容易造成全局污染,因为this.xx如果在局部获取不到,就会去全局中获取
4.构造函数可以重写,可以在全局中添加新属性和方法Person.prototype = {},但工厂函数只能在局部添加

各自适用场合:
构造函数:适应用于大型项目,属性以及方法时常变换的项目
工厂函数:适应用于小型项目,或者正在制作过程还没有成型的项目
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-23
虽然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");本回答被网友采纳
相似回答