//样例使用对象
onload = function(){
var p1 = new Person(‘zzh’,12);
p1.sayWord();
console.log(p1.drink);
Person.test2();
console.log(Person.eat);
p1.getHome();
console.log(p1.age);
var p2 = new Person('hsy',12);
p2.getHome();
console.log(p2.age);
console.log(p1.test == p2.test); // true 证明静态私有变量共享性
}
//创建Person对象
var Person = (function(){
// 静态私有属性(只能在内部调用)
var home = "china";
// 静态私有方法(只能在内部调用)
function sayHome(name){
console.log(name + "'s home in " + home);
}
// 构造函数
function _person(name,age){
var _this = this;
//构造函数安全模式,避免创建时候丢掉new关键字
if(_this instanceof _person){
// 公有属性和方法
_this.name = name;
_this.getHome = function(){
sayHome(_this.name);
};
_this.test = sayHome; //用于测试
// 构造器
_this.setAge = function(age){
_this.age = age + 12;
}(age);
}else{
return new _person(name,age);
}
}
// 静态方法 只能被类访问
_person.test2 = function(){
console.log("you are so man");
}
// 静态属性 只能被类访问
_person.eat = "eat some banana";
_person.prototype.test3 = function(){ // ???????
console.log("you are a girl");
}
// 静态公共属性方法
_person.prototype = {
constructor:_person,
drink:'water', // 可以通过对象进行访问 不能通过类名进行访问
sayWord:function(){ // 可以通过对象进行访问 不能通过类名进行访问
console.log('you are a boy');
}
}
return _person;
})();