封裝:對于功能相同代碼,我們只需要封裝一次,以后再遇到類似的功能,只需要調(diào)用即可,無需再重寫;避免大量冗余代碼;
對象的特征:屬性和方法;
面向?qū)ο蟮奶攸c(diǎn):
1.封裝:低耦合高內(nèi)聚;
2.繼承:子類可以繼承父類的屬性和方法;
3.多態(tài):多種形態(tài);主要包含重載和重寫;重載:JS中沒有嚴(yán)格意義上的重載,但是他有類似重載的功能,就是傳不同的不同的參數(shù),可以實(shí)現(xiàn)不同的功能;
重寫:子類可以重寫父類的屬性和方法;
單例模式的優(yōu)缺點(diǎn):
單例模式的本質(zhì):對象;
優(yōu)點(diǎn):實(shí)現(xiàn)模塊化開發(fā),而且,他是最簡單的模塊化開發(fā);
1)不同模塊之間的相互調(diào)用:對象名.屬性名;
2)本模塊之間的相互調(diào)用:this.屬性名;
3)避免了全局變量名的沖突
注意事項(xiàng):引入各個模塊,需要注意引入順序,引入順序是按照各模塊之間的相互依賴進(jìn)行前后排列的;
缺點(diǎn):不同的對象下,會有很多功能相同的代碼,最終造成大量冗余代碼
解決措施:工廠模式;工廠模式:
工廠模式的本質(zhì):就普通函數(shù)的封裝;
工廠模式總共3步驟:
1)引進(jìn)原材料 --- 創(chuàng)建一個空對象
2)加工原材料 --- 加工對象:給對象添加屬性和方法;
3)輸出產(chǎn)品 --- 返回對象:return 對象;
工廠模式的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):避免了單例模式中的大量冗余代碼,進(jìn)行系統(tǒng)的封裝
缺點(diǎn):跟系統(tǒng)內(nèi)置類的調(diào)用方式不同:工廠模式和構(gòu)造函數(shù)模式的區(qū)別:
1)在調(diào)用的時候不同:
工廠模式:調(diào)用的時候,只是普通函數(shù)的調(diào)用createPerson();
構(gòu)造函數(shù)模式:new CreatePerson();
2)在函數(shù)體內(nèi)不同:
工廠模式有三步:1)創(chuàng)建對象 2)加工對象 3)返回對象;
構(gòu)造函數(shù)模式只有1步: 只有加工對象; 因?yàn)橄到y(tǒng)默認(rèn)會為其創(chuàng)建對象和返回對象;構(gòu)造函數(shù):
可以創(chuàng)建一個自定義的類,并且可以new出實(shí)例;
構(gòu)造函數(shù)主要是:實(shí)例和類打交道;
構(gòu)造函數(shù)中的屬性和方法都是私有的;
構(gòu)造函數(shù)中的this都是實(shí)例;
prototype上的屬性和方法都是公有的;
當(dāng)我們給 類.prototype={} 這樣賦值的時候,constructor指向一定會出問題;構(gòu)造函數(shù)需要注意的細(xì)節(jié):
1)構(gòu)造函數(shù)中的this都是new出來的實(shí)例;
2)構(gòu)造函數(shù)中存放的都是私有的屬性和方法
3)構(gòu)造函數(shù)中系統(tǒng)默認(rèn)為我們返回一個對象this,不建議自己手動返回,如果非要自己手動返回:
1 手動返回的是字符串類型:對以前實(shí)例上的屬性和方法沒有影響;
2.手動返回的是引用數(shù)據(jù)類型:以前實(shí)例身上的屬性和方法就被覆蓋了;實(shí)例無法調(diào)用屬性和方法;
4)構(gòu)造函數(shù)在調(diào)用的時候,如果沒有參數(shù),小括號可以省略;
5)構(gòu)造函數(shù)就是類和實(shí)例在打交道;
6 ) 構(gòu)造函數(shù)中帶var跟實(shí)例沒有任何關(guān)系,實(shí)例只跟this.xxx有關(guān);
7 ) 構(gòu)造函數(shù)的缺點(diǎn):構(gòu)造函數(shù)的方法都是私有方法,這個每個實(shí)例調(diào)用的都是自己私有的方法;
解決措施:原型prototype;原型模式:
原型模式主要是:類 實(shí)例 和 原型;
1)每個函數(shù)數(shù)據(jù)類型(普通函數(shù),類)上,都有一個屬性,叫prototype,他是一個對象;
2)prototype這個對象上,天生自帶一個屬性,叫constructor:指向當(dāng)前這個類;
3)每個對象數(shù)據(jù)類型(普通對象,prototype,實(shí)例)上都有一個屬性,叫做____proto____指向當(dāng)前實(shí)例所屬類的原型;Object.prototype上面的屬性和方法;
hasOwnProperty:判斷是否為私有屬性,window.hasOwnProperty('getComputedStyle')
isPrototypeOf: obj.isPrototypeOf(f1)->判斷前一個對象是否在后一個對象的原型鏈上;
propertyIsEnumerable 可以打印出自定義的屬性和方法:私有;原型鏈:如果想查找 對象.屬性名 f1.x:
1)先在自己的私有空間中進(jìn)行查找,找到的話,說明x是私有屬性;
2)找不到:通過proto去當(dāng)前實(shí)例所屬類的原型上進(jìn)行查找,找到的話,說明是公有屬性;
3)找不到:繼續(xù)通過proto去當(dāng)前實(shí)例所屬類的原型上進(jìn)行查找,找不到,繼續(xù)通過proto一直找到Object.prototype上還沒有的話,undefined!;instanceof: 檢測實(shí)例是否屬于某個類;
IE下禁止使用 ____proto____;
1.每個對象,都是基類Object的實(shí)例;
每個函數(shù),都是Function這個類的實(shí)例;關(guān)于Object基類 和 Function類之間的關(guān)系:
1)Object.prototype 是 Function.prototype的爹;
2)Object.prototype 是 Function這個對象的爹;
3)Object instanceof Function;-》true;
4)Function instanceof Object;-》true函數(shù)的三種角色:
1)普通函數(shù):形成私有作用域-形參賦值-欲解釋-代碼從上到下的執(zhí)行 內(nèi)存和內(nèi)存釋放;
2)類:實(shí)例,原型,原型鏈,constructor
3)對象:就跟普通的對象一模一樣,都有屬性和方法;
面向?qū)ο?/h1> 最后編輯于 :?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
推薦閱讀更多精彩內(nèi)容
- 使用同一個接口創(chuàng)建很多對象,會產(chǎn)生大量的重復(fù)代碼。為解決這個問題嗎,人們開始使用工廠模式的一種變體。 工廠模式 工...
- 博客內(nèi)容:什么是面向?qū)ο鬄槭裁匆嫦驅(qū)ο竺嫦驅(qū)ο缶幊痰奶匦院驮瓌t理解對象屬性創(chuàng)建對象繼承 什么是面向?qū)ο?面向?qū)ο?..
- 本章內(nèi)容 理解對象屬性 理解并創(chuàng)建對象 理解繼承 面向?qū)ο笳Z言有一個標(biāo)志,那就是它們都有類的概念,而通過類可以創(chuàng)建...
- “ 今天我們跟隨白宇睡遍這個星球 ” 就在剛剛妙計旅行的分享會上,我們邀請了特別酷的旅行家白宇,來講述他580天的...