创建对象的模式
工厂方法(工厂函数)
// 工厂就是用来生产的, 因此如果函数创建对象并返回, 就称该函数为工厂函数
function createPerson(name, age, gender) {
var o = {};
o.name = name;
o.age = age;
o.gender = gender;
return o;
}
// document.createElement()
构造方法
function Person(name, age, gender){
this.name = name;
this.age = age;
this.gender = gender;
}
var p = new Person("zhangsan", 19, "男");
寄生式创建对象
function Person(name, age, gender){
var o = {};
o.name = name;
o.age = age;
o.gender = gender;
return o;
}
var p = new Person("Jack", 18, "male");
混合式创建
混合式继承就是将所有的属性放在构造方法里面,然后将所有的方法放在原型里面,使用构造方法和原型配合起来创建对象。(见:原型链-使用原型解决构造函数问题)。
Q :为什么要把方法放在原型里?(详见:函数-传统构造函数存在的问题)
A:解决两个问题
- 方法直接方法构造函数里,每创建一个对象,就会创建一次方法,造成资源浪费
- 如果把方法放在全局下引用,又会造成全局变量增多,难以维护