模块模式:用于创建拥有私有数据的单件对象的模式
使用IIFE返回一个对象
var person = (function() {
// 私有属性
var age = 25;
// 公有属性和方法
return {
name: 'u14e',
getAge: function() {
return age;
}
grow: function() {
age++;
}
}
}());
暴露模块模式
var person = (function() {
// 私有属性
var age = 25;
function getAge() {
return age;
}
function grow() {
age++;
}
return {
name: 'u14e',
getAge: getAge,
grow: grow,
}
}())
构造函数的私有成员
function Person(name) {
// 私有属性
var age = 25;
this.name = name;
this.getAge = function() {
return age;
}
this.grow = function() {
age++;
}
}
模块模式和构造函数结合
var Person = (function() {
// 私有属性
var age = 25;
function InnerPerson(name) {
this.name = name;
}
InnerPerson.prototype.getAge = function() {
return age;
}
InnerPerson.prototype.grow = function() {
age++;
}
return InnerPerson;
}());
var person1 = new Person('u14e');
var person2 = new Person('u148');
console.log(person1.name); // 'u14e'
console.log(person1.getAge()); // 25
console.log(person2.name); // 'u148'
console.log(person2.getAge()); // 25
person1.grow();
console.log(person1.getAge()); // 26
console.log(person2.getAge()); // 26
Person的全部实例共享age变量,在一个实例上的改动会影响另一个