摘要:工廠模式優(yōu)點(diǎn)集中實(shí)例化,可以傳參等缺點(diǎn)分不清屬于哪個對象我們先來談?wù)剝?yōu)點(diǎn),看例子集中實(shí)例化返回實(shí)例化對象返回返回不難看出,工廠模式比上面的例子減少了很多代碼。
ECMAscript開發(fā)的兩種模式:
1.過程化 2.OOP(面向?qū)ο?
面向?qū)ο蟮恼Z言有一個標(biāo)志,那就是類的概念,而通過類可以創(chuàng)建任意多個具有相同屬性的方法的對象。但是ECMAscript中沒有類的概念!
又談作用域
首先我們先創(chuàng)建一個對象:
var createObject = new Object(); //創(chuàng)建一個Object對象 createObject.a = "abc"; //給對象添加屬性 createObject.b = 10; //同上 createObject.c = function () { //給對象添加方法 return this.a + this.b; //這里的this作用域是createObject下 }; alert(createObject.c()); //返回abc10
不難看出,在實(shí)例化createObject下的方法里面,this的作用域是指向本身的!
我們理解了作用域接下來我們繼續(xù)看,如果我想創(chuàng)建兩個同樣的方法和屬性,就要寫很多重復(fù)代碼,這是程序員最煩的問題。比如我們還要創(chuàng)建一個createObject1:
var createObject1 = new Object(); //創(chuàng)建一個Object對象 createObject1.a = "abcdef"; //給對象添加屬性 createObject1.b = 20; //同上 createObject1.c = function () { //給對象添加方法 return this.a + this.b; //這里的this作用域是createObject下 }; alert(createObject1.c()); //返回abcdef20
不難看出,兩段代碼重復(fù)代碼過多,所以我們就要用工廠模式避免實(shí)例化對象大量重復(fù)問題。
工廠模式
優(yōu)點(diǎn):集中實(shí)例化,可以傳參等
缺點(diǎn):分不清屬于哪個對象
我們先來談?wù)剝?yōu)點(diǎn),看例子:
function createObject(a,b){ var obj = new Object(); //集中實(shí)例化 obj.a = a; obj.b = b; obj.c = function () { return this.a + this.b; }; return obj; //返回實(shí)例化對象 } var box = createObject("abc",10); var box1 = createObject("abcdef",20); alert(box.c()); //返回abc10 alert(box1.c()); //返回abcdef20
不難看出,工廠模式比上面的例子減少了很多代碼。集中實(shí)例化了對象。用的時候直接調(diào)用就可以了,而且可以傳參。不用在對象屬性內(nèi)部去修改參數(shù)。
缺點(diǎn):
無法分清哪個是哪個的對象。
//我們來看看檢測box,box1的類型 alert(typeof box); //object alert(typeof box1); //object
WTF?哪個是哪個的對象?根本傻傻分不清!很多人說了,那就用instanceof去檢測是不是object實(shí)例不就得了?
(instanceof 是用來判斷一個變量是否是某個對象的實(shí)例)
alert(box instanceof Object); //true alert(box1 instanceof Object); //true
事實(shí)證明,還是分不清到底box,box1是誰的實(shí)例。
OOP Javascript中的工廠模式先講到這里,下一章我們會講到構(gòu)造函數(shù),來解決這個問題。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/81024.html
摘要:構(gòu)造函數(shù)通過原型繼承了構(gòu)造函數(shù)和原型,這就形成了一個鏈條,通俗的講就是原型鏈繼承。而且方法只能冒充構(gòu)造函數(shù)里面的屬性和方法而無法冒充原型對象里面的屬性和方法還有最大的問題就是重復(fù)使用。 前言: 寫到這里,差不多就把OOP完結(jié)了,寫了幾篇OOP的文章,但是只是略懂皮毛,可能深入的OOP還有很多,但是我感覺寫到這里也算是差不多完結(jié)了。 繼承 繼承是面向?qū)ο蟊容^核心的概念,其他語言可能實(shí)現(xiàn)...
摘要:構(gòu)造函數(shù)上一章我們講了工廠模式,它的缺點(diǎn)就是無法識別到底哪個屬于哪個的問題。我們可以用構(gòu)造函數(shù)來解決這個識別問題。來比較構(gòu)造函數(shù)內(nèi)的值就可以看出到底是什么類型。 構(gòu)造函數(shù) 上一章我們講了工廠模式,它的缺點(diǎn)就是無法識別到底哪個屬于哪個的問題。我們可以用構(gòu)造函數(shù)來解決這個識別問題。 //構(gòu)造函數(shù) function Create(a,b) { this.a =a; this...
摘要:上一章我們談了構(gòu)造函數(shù),他的唯一特點(diǎn)就是比較了地址不相同,因?yàn)榇蠹抑酪妙愋褪潜容^的引用。也就是說不用在構(gòu)造函數(shù)中定義對象實(shí)例,而是直接將這些添加到原型當(dāng)中。如果構(gòu)造函數(shù)實(shí)例里面沒有,就去原型里面查找,如果有就立即返回。 上一章我們談了構(gòu)造函數(shù),他的唯一特點(diǎn)就是比較了地址不相同,因?yàn)榇蠹抑酪妙愋褪潜容^的引用。我們來談?wù)勗汀?原型 我們每創(chuàng)建一個函數(shù)都有一個原型(prototyp...
摘要:而哈士奇區(qū)別于普通狗,又有新的特征逗比,愛搗亂為了保證類之間的松綁定,通常會繼承抽象類,而且是淺繼承只有一層子類。如果知道所有類都會共享一個公共的行為實(shí)現(xiàn),就使用抽象類,并在其中實(shí)現(xiàn)該行為。 為什么使用OOP OOP是一個模塊化的過程,目的是為了把復(fù)雜問題簡單化,一個模塊解決一個復(fù)雜問題的某一個方面,即一個類應(yīng)當(dāng)只有一個職責(zé) OOP區(qū)別于順序式編程與過程式編程,在于: 1.順序編程...
摘要:面向?qū)ο竺嫦驅(qū)ο缶幊痰娜Q是,簡稱,面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)世界模型的一種編程模式。面向?qū)ο缶幊痰娜齻€主要特征是封裝繼承多態(tài)。 面向?qū)ο?面向?qū)ο缶幊痰娜Q是Object Oriented Programming,簡稱OOP,面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)世界模型的一種編程模式。面向?qū)ο缶幊炭梢钥醋鍪鞘褂靡幌盗袑ο笙嗷f(xié)作的軟件設(shè)計(jì),面向?qū)ο蟪绦蛟O(shè)計(jì)的目的是在編程中促...
閱讀 3271·2021-09-23 11:55
閱讀 2614·2021-09-13 10:33
閱讀 1670·2019-08-30 15:54
閱讀 3099·2019-08-30 15:54
閱讀 2367·2019-08-30 10:59
閱讀 2374·2019-08-29 17:08
閱讀 1807·2019-08-29 13:16
閱讀 3590·2019-08-26 12:25