面向?qū)ο?/h1>
  • 封裝:對于功能相同代碼,我們只需要封裝一次,以后再遇到類似的功能,只需要調(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)對象:就跟普通的對象一模一樣,都有屬性和方法;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容