四種模式
工廠模式
- 聲明一個(gè)對(duì)象
- 向?qū)ο筇砑訉傩院头椒?/li>
- 返回這個(gè)對(duì)象
- 創(chuàng)建新對(duì)象棋嘲,通過函數(shù)創(chuàng)建
function person(name,age){
var z = new Object(); // 1.聲明一個(gè)對(duì)象
z.name = 'xin'; // 2.向?qū)ο筇砑訉傩院头椒? z.age = 22;
z.sayName = function(){
return this.name;
};
return z; // 3.返回這個(gè)對(duì)象
};
var per1 = person('xinxin',23); // 4.創(chuàng)建新對(duì)象正勒,通過函數(shù)創(chuàng)建
alert(per1);
alert(per1.sayName());
alert( per1.name instanceOf);
- 在一個(gè)函數(shù)內(nèi)創(chuàng)建一個(gè)對(duì)象,給對(duì)象添加屬性和方法,再將對(duì)象返回
- 無法識(shí)別對(duì)象的類型鞭衩,全部為Object
構(gòu)造函數(shù)模式
- 首字母大寫
- 沒有顯式創(chuàng)建對(duì)象
- 直接賦值屬性方法給this
- 沒有return語句
- 使用new操作符創(chuàng)建對(duì)象
- instanceOf()能夠識(shí)別對(duì)象
function Person(name,age){ // 1. 首字母大寫 2. 沒有顯式創(chuàng)建對(duì)象
this.name = name; // 3. 直接賦值屬性方法給this
this.age = age;
this.sayName = function(){
return this.name+' is '+this.age+' years old.';
}; // 4. 沒有return語句
}
var per1 = new Person('xin',22); // 5. 使用new操作符創(chuàng)建對(duì)象
alert(per1.name);
alert(per1.sayName());
alert(instanceOf per1.name); // 6. instanceOf()能夠識(shí)別對(duì)象
原型模式
- 省略了參數(shù)垮卓,所有實(shí)例均取得了相同的屬性
- 一個(gè)實(shí)例修改了引用感憾,另一個(gè)實(shí)例也隨之更改了引用
function Person(){} // 1. 省略了參數(shù)回右,所有實(shí)例均取得了相同的屬性
Person.prototype.name = 'xinchou';
Person.prototype.age = 22;
Person.prototype.sayName = function(){
return this.name+' is '+this.age+' years old.';
}
var per1 = new Person();
var per2 = new Person();
alert(per1.sayName());
alert(per2.sayName());
// per1.name.pop();
per2.name = 'hua';
per2.age = 24;
alert(per1.sayName());
alert(per2.sayName()); // 2. 一個(gè)實(shí)例修改了引用,另一個(gè)實(shí)例也隨之更改了引用
原型模式+構(gòu)造函數(shù)模式
- 構(gòu)造函數(shù)定義實(shí)例屬性
- 原型模式用于定義方法和共享屬性
- 每個(gè)實(shí)例都有自己的一份實(shí)例屬性植酥,并共享著方法
function Person(name,age){ // 1. 構(gòu)造函數(shù)定義實(shí)例屬性
this.name = name;
this.age = age;
}
Person.prototype.sayName = function(){ //2. 原型模式用于定義方法和共享屬性
return this.name+' is '+this.age+' years old.';
};
var per1 = new Person('xin',23);
var per2 = new Person('hua',25);
alert(per1.name); // 3. 每個(gè)實(shí)例都有自己的一份實(shí)例屬性镀岛,并共享著方法
alert(per1.sayName());
四種模式對(duì)比