方式一:工厂模式
function createPerson(name, age, job){
var person = new Object();
person.name = name;
person.age = age;
person.job = job;
person.sayName = function(){
alert(this.name);
}
return person;
}
var xiaoMing = createPerson('小明',12, '学生');
存在缺点:无法知道xiaoMing的类型。
改进:构造函数模式
方式二:构造函数
function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert(this.name);
}
}
var xiaoMing = new Person('小明',12, '学生');
var xiaoXin = new Person('小心', 13, '老师');
alert(xiaoMing.sayName==xiaoXin.sayName); // false
类型概念:
xiaoMing instanceof Person; // true
xiaoXin instanceof Person; //true
xiaoMing.constructor == Person;//true
缺点:没法设置共有成员,如sayName方法
改进:结合构造函数与原型模式
方式三:结合构造函数与原型模式
function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
}
Person.prototype.sayName = function(){
alert(this.name);
}
var xiaoMing = new Person('小明',12, '学生');
var xiaoXin = new Person('小心', 13, '老师');
alert(xiaoMing.sayName==xiaoXin.sayName); // true
优点:原型模式具备类似Java中的静态成员变量、静态方法;