工厂模式
工厂模式通过在函数中创建一个对象(原材料),然后通过给这个对象添加属性和方法(加工),最后返回这个对象(出厂)。
// 1.工厂模式
function createPerson(name,age,job) {
//1.原材料
var o = new Object();
//2.加工
o.name = name;
o.age = age;
o.job = job;
o.sayName = function() {
alert(this.name);
};
//3.出厂
return o;
}
var yoomin = createPerson('yoomin',24,'programmer'); // 调用,没有new
构造函数模式
构造函数是通过给this添加属性和方法,在new的时候才返回一个对象,构造函数本身是没有返回值的。
// 2.构造函数模式
function Person(name,age,job) {
this.name = name;
this.age = age;
this.job = job;
this.sayAge = function() {
alert(this.age);
}
}
var Jay = new Person('Jay',30,'singer'); //调用
构造函数方式与原型方式组合
使用构造函数方式定义属性,用原型方式定义方法和共享变量:
构造函数定义属性:
function Person(name,age,job) {
// 构造函数模式定义实例属性
this.name = name;
this.age = age;
this.job = job;
}
原型方式定义方法:
Person.prototype = {
//原型模式定义方法和共享属性
constructor: Person, //重写原型改变了constructor,修正回来
sayName:function() {
alert(this.name);
},
sayJob:function() {
alert(this.job);
}
}
注意:用字面量方式定义prototype,会改变prototype的constructor指向,需要修正。
创建对象:
var Kelly = new Person('Kelly',35,'singer'); //调用
Kelly.sayName(); //Kelly