工廠模式,建構函式模式,原型模式,組合模式簡單理解

2022-06-06 18:03:09 字數 2280 閱讀 8602

我們知道建立物件常見的方式有兩種:字面量方式和new 操作符方式

字面量var people1 =

new操作符

var people2 = new object()

people2.name="小花"

儘管這兩種可以滿足我們的基本要求,但是在建立大量類似物件時候,會產生大量的重複**。因此我們產生了工廠模式

function person(name,age) ;

return obj

}var person1 = person('小明',12)

console.log(person1 instanceof person)//false

console.log(person1 instanceof object)//true

雖然工廠模式解決了我們建立大量物件問題,但是產生了新的問題,無法確定物件的**問題,因此我們產生了建構函式模式

function person(name)

}var p1 = new person("小明");

var p2 = new person("小花");

console.log(p1 instanceof person)//true

console.log(p1 instanceof object)//true

console.log(p1.sayname===p2.sayname);//false

p1.sayname();

p2.sayname();

這種方式解決了物件的**問題,但是也有問題,每生成乙個例項都會建立乙個function例項,因此我們改進模式,讓每個例項的方法指向同乙個例項

function person(name)

function sayname()

var p1 = new person("小明");

var p2 = new person("小花");

console.log(p1.sayname===p2.sayname)//true

但是這樣在全域性作用域的方法只能被person例項化的物件使用,而且多個方法需要建立多個全域性方法,這樣封裝性很低。於是我們產生了原型模式

每個函式都有它的原型屬性,即prototype,這個屬性是乙個指標,指向乙個物件

function person() ;

person.prototype.name = "小明";

person.prototype.sayname = function () ;

var p1 = new person();

var p2 = new person();

console.log(p1.name);//小明

console.log(p2.name);//小明

console.log(p1.sayname===p2.sayname)//true

console.log(p1 instanceof person)//true

原型模式既解決了物件**問題,也解決了物件公用同一方法的問題。但是原型模式也不是沒有缺點的

function person() ;

person.prototype.name = "小明";

person.prototype.family = ["小王","小張","小李"];

person.prototype.sayname = function () ;

var p1 = new person();

var p2 = new person();

p1.family.push("小孫")

console.log(p1.family);//["小王", "小張", "小李", "小孫"]

console.log(p2.family);//["小王", "小張", "小李", "小孫"]

如上所示,每個例項都繼承了原型的預設屬性,當某個例項被修改時,會改變原型的,因此,p2的family也跟隨改變,前提是修改他的屬性而不是賦值,直接給p1的family賦值是不會改變p2的。當然你也可以通過複製原型的屬性在進行操作(實際上就是賦值),但是這樣顯然不是我們想要的。

let family = json.parse(json.stringify(p1.family))

family.push("小孫");

p1.family = family;

console.log(p1.family);//["小王", "小張", "小李", "小孫"]

console.log(p2.family);//["小王", "小張", "小李"]

於是我們再次改進,這樣出現了組合模式,建構函式模式和原型模式

模式學習小結 工廠模式 建構函式 原型模式

一直對工廠模式 建構函式及原型模式的定義有些模糊,今天抽了些時間學了下工廠模式 建構函式及原型模式的區別及用途,小結一番。一 工廠模式 工廠模式 function createperson name,age var person1 createperson one 20 var person2 cr...

工廠模式與建構函式模式

簡單工廠模式 以object建構函式或字面量的方式建立物件有著重複性,會產生大量重複 的缺陷,由此,便出現了工廠模式。function createobj name,age var obj1 createobj 小明 66 var obj2 createobj 小白 13 console.log o...

建立型模式 原型模式

使用原型例項指定建立物件的種類,並且通過轉殖這些原型建立新的物件 原理是將乙個原型物件傳給要發動建立的物件,該物件通過請求原型物件轉殖自己來建立過程 轉殖方法 public prototype clone jdk中為我們提供了轉殖的方法clone 從object繼承下來,乙個物件要實現轉殖,需要實現...