先上代码,来自《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