javascript中的工厂模式和构造函数有什么区别?

2024-12-03 11:24:11
推荐回答(3个)
回答1:

工厂模式:就是把参数传进去后。进过一系列的处理。然后得到想要的结果。然而。他这样会很消耗资源。每一次的创建都会创建空间。也就是user.speak=function这边。这样会降低性能。

构造函数也叫混合模式。是通过prototype方法把需要添加的函数在外部添加。也就是不论实例化多少的对象。也不会占用空间。不会消耗性能。

回答2:

虽然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");

回答3:

给你看个例子

稳妥构造函数模式的写发

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;
}

着就是工厂模式和稳妥构造函数的区别吧!