對象的 2 大特征
- 屬性
- 方法
面向?qū)ο蟮奶攸c
- 封裝:低耦合高內(nèi)聚,即:同樣的功能诱告,只需要寫一次撵枢,把它封裝起來,以后再遇到類似的功能精居,只要調(diào)用即可锄禽,可以避免大量冗余代碼
- 繼承:子類繼承父類的屬性和方法
- 多態(tài):包含重載和重寫
- 重載:JS中沒有嚴格意義上的重載,但是有類似重載的功能靴姿,就是傳不同的參數(shù)可以實現(xiàn)不同的需求
- 重寫:子類可以重寫父類的屬性和方法
面向?qū)ο笤O(shè)計思想
單例模式
- 把描述同一對象的屬性和方法沃但,都放在同一個命名空間下
- 本質(zhì)上就是對象 {}
- 模塊化開發(fā)思想:對于一個大型項目,我們會分配各不同的前端人員一起開發(fā)佛吓,各自負責(zé)各自的模塊宵晚,等開發(fā)完成的時候,進行代碼合并
- 單例模式在開發(fā)中
- 不同模塊之間的相互調(diào)用:對象.屬性名
- 同一模塊之間的相互調(diào)用:this.屬性名
- 優(yōu)點
- 最常用最簡單的開發(fā)模式
- 避免全局變量的沖突
- 可以模塊之間的互相調(diào)用
- 缺點
- 當對象特別多维雇,每個對象都有類似的屬性和方法坝疼,會造成大量的冗余代碼
工廠模式
// new person()
function person(name,age){
// 1) 創(chuàng)建一個空對象
var obj = {};
// 2) 加工對象:本質(zhì)上就是給對象添加屬性和方法
obj.name = name;
obj.age = age;
obj.showName = function(){
// 當元素身上的事件被觸發(fā)的時候,會執(zhí)行一個函數(shù)谆沃,函數(shù)中的this指向當前的這個元素
alert('我的名字是'+this.name);
}
// 3) 返回對象
return obj钝凶;
}
- 工廠長模式主要包含 3 步
- 引進原材料 -> 創(chuàng)建一個空對象 var obj={}
- 加工原材料 -> 給對象添加屬性和方法
- 輸出產(chǎn)成品 -> 返回對象
- 優(yōu)點:避免大量冗余的代碼,提高開發(fā)效率
- 不足點:長得跟系統(tǒng)方法不一樣
- 首字母小寫唁影,系統(tǒng)大寫
- 沒有new
- 解決方法:構(gòu)造函數(shù)模式
構(gòu)造函數(shù)模式
- 構(gòu)造函數(shù)和工廠模式的區(qū)別
- 從函數(shù)內(nèi)在的區(qū)別
- 工廠模式有三步:1) 創(chuàng)建一個空對象 2)給對象添加屬性和方法 3) 返回對象
- 構(gòu)造函數(shù)只有 一 步: 給對象添加函數(shù)和方法耕陷,因為系統(tǒng)會自動給構(gòu)造函數(shù)創(chuàng)建一個對象this,并自動返回
- 從函數(shù)調(diào)用的卻別
- 構(gòu)造函數(shù)据沈,首字母大寫哟沫,而工廠模式是首字母小寫
- 構(gòu)造函數(shù)有new,工廠模式?jīng)]有new
- 關(guān)于構(gòu)造函數(shù)需要注意點
- 構(gòu)造函數(shù)中的this锌介,指向?qū)嵗?/li>
- 構(gòu)造函數(shù)中系統(tǒng)會自動幫我們返回對象嗜诀,所以猾警,不要自己返回,否則隆敢,對象上沒有我們添加的屬性和方法
- 構(gòu)造函數(shù)屬性和方法都是私有的
- 構(gòu)造函數(shù)中new出來的都是實例发皿,也都是對象
- 構(gòu)造函數(shù)的不足點
- 對于同一個功能,每創(chuàng)建一個實例拂蝎,這個功能都是私有的方法穴墅,如果創(chuàng)建很多實例,就會造成內(nèi)存占用
原型模式
- 每個函數(shù)數(shù)據(jù)類型(類温自,普通函數(shù))玄货,都有一個屬性prototype
- prototype 是個對象,這個對象存放公有的屬性和方法悼泌,它天生自帶一個屬性constructor松捉,執(zhí)行當前所屬的類
- 每個對象數(shù)據(jù)類型(Object,prototype,實例),都有一個屬性proto,它指向當前實例所屬類的原型
- 原型模式主要掌握:1) 類 2)實例 3) prototype
原型鏈
- 我們查找"對象.屬性名"的時候
- 先從實例的私有屬性開始查找馆里,如果找到隘世,說明該屬性是私有屬性
- 如果沒有找到,通過proto也拜,去當前實例所屬的類的原型上進行查找以舒,找到趾痘,說明是共有屬性
- 如果沒有找到慢哈,繼續(xù)通過proto往上找,一直找到Object.prototype上還沒有的話永票,undefined卵贱!
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者