工厂模式和稳妥构造模式的区别

先上代码,来自《JS高程》

function createPerson(name, age, job) {
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function() {
        alert(this.name);
    }
    return o;
}
var person1 = createPerson("Nicholas", 29, "Software Engineer");
person1.sayName();


下面说说什么是稳妥构造函数(durable constructor)模式

稳妥构造函数模式

1. 稳妥对象(durable objects):没有公共属性,而且其方法也不引用this的对象叫作稳妥对象。

2. 稳妥对象的使用场景:

(1) 安全的环境,环境禁用thisnew

(2) 防止数据被其他应用程序改动(Mashup程序)
mashup是糅合,是当今网络上新出现的一种网络现象,将两种以上使用公共或者私有数据库的web应用,加在一起,形成一个整合应用。”——来自百度百科

3.  稳妥构造函数模式的适用场景

(1) 新创建对象的实例方法不能引用this

(2) 不使用new调用构造函数

function createPerson(name, age, job) {
    var o = new Object();
    //相当于private memebers
    var name = name;
    var age = age;
    //相当于public members
    o.job = job;  //稳妥构造函数模式不应该把属性写成o.job,这会让外部函数访问到他
    o.sayName = function() {
        alert(name);
    };
    o.sayAge = function() {
        alert(age);
    }
    return o;
}
var person1 = createPerson("Nicholas", 29, "Software Engineer");
person1.sayName();    //Nicholas
person1.sayAge();     //29
alert(person1.name);  //undefined
alert(person1.age);   //undefined
alert(person1.job);   //Software Engineer

这里没有使用this,也不用new调用构造函数。

可以看到alert是不能访问对象的name和age的,但是可以访问job

凡是想设为 private 的成员都不要挂到 Person 返回的对象 o 的属性上面,挂上了就是 public 的了。

参考了知乎稳妥构造函数模式和工厂模式创建对象有什么区别? - 知乎https://www.zhihu.com/question/25101735

猜你喜欢

转载自blog.csdn.net/dongdaxiaopenyou/article/details/79440062