1.工厂模式
这种模式抽象了创建具体对象的过程
function createPerson () {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function () {
alert(this.name)
}
}
var person1 = createPerson('silva', 29, 'IT');
2.构造函数模式
function Person (name, age) {
this.name = name;
this.age = age;
this.say = function () {
console.log('hello');
}
}
var p1 = new Person('silva', 26);
var p2 = new Person('jimmy', 29);
// 备注: 要创建Person的新的实例,必须使用new操作符。
// 以这种方式调用构造函数实际上经历以下4个步骤:
// 1.创建一个新的对象
// 2.将构造函数的作用域赋值给新对象(因此this就指向了这个新对象)
// 3.执行构造函数中的代码
// 4.返回新的对象
3.原型模式
function Person () {}
Person.prototype = {
constructor: Person,
name: 'silva',
age: 29,
sayName: function () {
console.log(this.name);
}
}
var person1 = new Person();
person1.sayName();
4.组合使用构造函数模式和原型模式
构造函数模式用于定义实例属性,原型模式用于定义方法和共享属性
function Person (name, age, job) {
this.name = name;
this.age = age;
this.job = job;
}
Person.prototype = {
constructor: Person,
sayName: function () {
console.log(this.name);
}
}
var person1 = new Person('silva', 29, 'IT');
5.动态原型模式
// 把所有信息都封装在构造函数中
function Person (name, age, job) {
this.name = name;
this.age = age;
this.job = job;
if (typeof this.sayName != 'function') {
Person.prototype.sayName = function () {
console.log(this.name);
}
}
}
var person1 = new Person('silva', 29, 'IT');
6.寄生构造函数模式
// 这种模式的基本思想是创建一个函数,该函数的作用仅仅是封装创建对象的代码,然后再返回新创建的对象
function Person(name, age, job) {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function () {
console.log(this.name);
};
return o;
}
var friend = new Person('Mike', 18, 'student');
friend.sayName();