1.工廠模式
這種模式抽象了創(chuàng)建具體對象的過程
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.構(gòu)造函數(shù)模式
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);
// 備注: 要創(chuàng)建Person的新的實例垮刹,必須使用new操作符适篙。
// 以這種方式調(diào)用構(gòu)造函數(shù)實際上經(jīng)歷以下4個步驟:
// 1.創(chuàng)建一個新的對象
// 2.將構(gòu)造函數(shù)的作用域賦值給新對象(因此this就指向了這個新對象)
// 3.執(zhí)行構(gòu)造函數(shù)中的代碼
// 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.組合使用構(gòu)造函數(shù)模式和原型模式
構(gòu)造函數(shù)模式用于定義實例屬性碳抄,原型模式用于定義方法和共享屬性
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.動態(tài)原型模式
// 把所有信息都封裝在構(gòu)造函數(shù)中
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.寄生構(gòu)造函數(shù)模式
// 這種模式的基本思想是創(chuàng)建一個函數(shù),該函數(shù)的作用僅僅是封裝創(chuàng)建對象的代碼舌稀,然后再返回新創(chuàng)建的對象
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();