方式一:工厂模式
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中的静态成员变量、静态方法;
博客介绍了三种编程模式。工厂模式存在无法知晓对象类型的缺点,改进为构造函数模式;构造函数模式虽能明确对象类型,但无法设置共有成员,可结合构造函数与原型模式改进;结合模式的原型模式具备类似Java静态成员的特性。

被折叠的 条评论
为什么被折叠?



