工廠模式和穩妥構造模式的區別
阿新 • • 發佈:2019-02-11
先上程式碼,來自《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) 安全的環境,環境禁用this和new
(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