JavaScript面向对象系列:六、对象模式(二)

构造函数中的私有成员

模块模式在定义单个对象的私有属性上十分有效,但是对于那些同样需要私有属性的自定义类型,也可以在构造函数中使用类型的模式来创建每个实例的私有数据。

例如

function Person (name){
var age = 25;

this.name = name;

this.getAge = function(){
return age;
}

this.growOlder = function(){
age++;
}

}

var person = new Person("laowang");

console.log(person.name); //"laowang"
console.log(person.getAge()); //25

person.age = 100;
console.log(person.getAge()); //25

person.growOlder();
console.log(person.getAge()); //26

如果需要所有实例可以共享的私有数据,可以结合模块模式和构造函数。

例如

var Person = (function (name){
var age = 25;

this.name = name;

function InnerPerson (name){
this.name = name;
}

InnerPerson.prototype.getAge = function(){
return age;
}

InnerPerson.prototype.growOlder = function(){
age++;
}

return InnerPerson;
})();

var person1 = new Person("laowang");
var person2 = new Person("xiaowang");

console.log(person1.name); //"laowang"
console.log(person1.getAge()); //25

console.log(person2.name); //"xiaowang"
console.log(person2.getAge()); //25

person1.growOlder();
console.log(person1.getAge()); //26
console.log(person2.getAge()); //26

发表评论

电子邮件地址不会被公开。 必填项已用*标注