js面向对象-创建对象
工厂模式
工厂模式通过在函数中创建一个对象(原材料),然后通过给这个对象添加属性和方法(加工),最后返回这个对象(出厂)。
// 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