1. 程式人生 > >工廠模式和穩妥構造模式的區別

工廠模式和穩妥構造模式的區別

先上程式碼,來自《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