Javascript中的回調(diào)地域,promise,面向?qū)ο螅üS模式,原型)

? ? 回調(diào)地域:

????????與后臺發(fā)生數(shù)據(jù)交互的時(shí)候,ajax的請求回調(diào)中還有一個或者是多個ajax請求,這樣的現(xiàn)象就形成了回調(diào)地域。

????????缺點(diǎn):代碼復(fù)雜,所有的請求一環(huán)套一環(huán)。邏輯不清晰,不方便閱讀同時(shí)也不利于調(diào)試。(ajax破壞了json的調(diào)試機(jī)制)

????????解決辦法:promise

1.promise(保證,承諾,允諾)

?? ? 作用:(1)答應(yīng)某件事情,承諾去做某件事情

?? ??? ??? ?? ? (2)用于解決回調(diào)地域的現(xiàn)象?;卣{(diào)地域一般出現(xiàn)在ajax請求當(dāng)中

?? ?? ? 三種狀態(tài):

?? ??? ??? ??? ?? ? (1).承諾的事情在進(jìn)行中

?? ??? ??? ??? ?? ? (2).承諾的事情沒有完成

?? ??? ??? ?? ? ?? ?(3).承諾的事情已經(jīng)完成了

?? ?? ? 誰去允諾?做什么事情?完成的情況?

?? ??? ?? ? 對象———執(zhí)行代碼---返回結(jié)果

?? ??? ??? ?? ? 允諾步驟:

?? ??? ??? ??? ??? ??? ?? ? (1)創(chuàng)建一個允諾對象?? ??? ??? ?兩個參數(shù)(成功,失?。?/p>

?? ??? ??? ??? ??? ??? ??? ??? ?? ? var pro= new promise(function(success,failed){

?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?? ? //執(zhí)行承諾的事情的過程有三種狀態(tài)

?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?? ??? ??? ??? ??//(1).承諾的事情在進(jìn)行中(pending)

?? ??? ??? ??? ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??//(2).承諾的事情沒有完成 (rejected)

?? ??? ??? ?? ??? ?? ??? ??? ??? ??? ??? ??? ??? ?? ? ?//(3).承諾的事情已經(jīng)完成了(resolved)

?? ??? ??? ??? ??? ??? ??? ??? ?});


?? ??? ??? ??? ??? ??? ??? ??? ?? ? pro下有一個“.then”方法,.then方法還可以接收一個回調(diào)

?? ??? ??? ??? ??? ??? ??? ??? ?? ? pro.then(function(res){

?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?? ? //接收成功回調(diào)傳遞回來的結(jié)果,結(jié)果保存在res中


?? ??? ??? ??? ??? ??? ??? ?},function(err){

?? ??? ??? ??? ??? ??? ??? ??? ??? ?? ? //接收失敗的信息,這樣的表達(dá)不會報(bào)錯。

?? ??? ??? ??? ??? ??? ??? ??? ??? ?}).then(function(res/err){


?? ??? ??? ??? ??? ??? ?});

?? ??? ??? ??? ??? ??? ??? ??? ?? ? 回調(diào)函數(shù)內(nèi)可以無限寫的then方法,每一次返回的結(jié)果就是上一個then方法執(zhí)行出來的結(jié)果

?? ??? ??? ??? ??? ??? ??? ??? ?? ??“.catch”方法。接收失敗回調(diào)傳遞回來的結(jié)果,保存在 err

?? ??? ??? ??? ??? ??? ??? ??? ?? ? pro.catch(function(err){

?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?? ? //catch方法接收失敗回調(diào)傳回來的結(jié)果,保存在err

?? ??? ??? ??? ??? ??? ??? ??});




2.對象(面向?qū)ο箝_發(fā))

? ? (1)對象和類

?? ??? ??? ?? ? 對象:當(dāng)我們要使用一些方法時(shí),這些方法都是存在某個對象下,有了對象才能使用方法

?? ??? ??? ??? ??? ??? ?? ? 對象從何而來?

?? ??? ??? ??? ??? ??? ??? ??? ?? ? 通過new一個構(gòu)造函數(shù),得到一個對象。

?? ??? ??? ??? ??? ??? ?? ? 什么是構(gòu)造函數(shù)?

?? ??? ??? ??? ??? ??? ??? ??? ?? ? 構(gòu)造函數(shù)就是傳說中的類,我們只能按照類的方法去理解.(js中沒有明確的面向?qū)ο蟮恼f法)

?? ??? ??? ??? ??? ??? ?? ? 類和對象的關(guān)系:先有類才有具體的對象。

?? ??? ?? 例:

?? ??? ??? ??? ?? ? 要創(chuàng)建很多同一類型的對象,會寫很多重復(fù)的代碼

?? ??? ??? ??? ?? ? 要解決這個代碼重復(fù)的問題

?? ??? ??? ??? ?? ? 就要應(yīng)用到面向?qū)ο蟮姆绞絹硖幚?/p>

? ? (2)面向?qū)ο螅嫦驅(qū)ο笫且环N高級的編程開發(fā)思想)

面向?qū)ο缶碗x不開this指向問題

?this回顧

? ? ? ? ?a.this指向離不開事件調(diào)用,函數(shù)創(chuàng)建的時(shí)候就產(chǎn)生一個this指向

? ? ? ? ?b.(誰調(diào)用就指向誰)當(dāng)有時(shí)間綁定,并執(zhí)行了事件處理程序時(shí),誰綁定的事件,事件處理程序中的this就指向誰

? ? ? ? ?c.回調(diào)函數(shù)中的this指向window

? ? ? ? ?d.匿名函數(shù)可以使用bind( )改變this的指向

? ? ? ? ? ? ? ? ?call( )和apply( )可以改變函數(shù)中的this指向

? ? ? ? ?e.箭頭函數(shù)本身沒有this,它的this是繼承父級而來

? ? ? ? ?f.箭頭函數(shù)不能使用call( ),apply( ),bind( ),方法來改變this指向

? ? ? ? ?g.嚴(yán)格模式下,全局函數(shù)的this是undefined

? ? ? ? ?h.面向?qū)ο笙碌囊恍﹖his

?? ?? ? ? ?對象通俗的解釋就是:?萬事萬物皆為對象


?? ??? ?? ? 面向?qū)ο缶褪莿?chuàng)造一出一個類,給到具體對象使用

開發(fā)思想說明:

? ? ? ? 把一個功能或者共有的屬性,進(jìn)行封裝,形參一中了類型,通過這種類型可以創(chuàng)建無數(shù)個具體的對象,

????????這些對象就可以使用這種類型的屬性和方法。

?? ??? ?? ? 使用工廠模式來封裝一種類型。

? ? ? ? ? ? a.工廠模式封裝:

????? ??? ??? ??function Person(name,age,sex){

?? ??? ??? ??? ?? ? //屬性

????????? ??? ??? ??var obj = new Object();

????????? ??? ??? ??obj.name = name;

????????? ??? ??? ??obj.age = age;

????????? ??? ??? ??obj.sex = sex;

?? ??? ??? ??? ?? ? //方法

?????????? ??? ??? ?obj.eat = function(){

?????????????? ??? ?return this.name + "在吃飯";

???????? ??? ??? ???}

????????? ??? ??? ??return obj;

?????? ??? ??? ?}?? ??? ?

?? ??? ?? ? 優(yōu)點(diǎn):

?? ??? ??? ??? ?? ? 解決了創(chuàng)建多個同類對象代碼重復(fù)問題

?? ??? ?? ? 缺點(diǎn):

?? ??? ??? ??? ?? ? 這個對象所屬類型不明確

?? ??? ??? ??? ?? ? 寫法不規(guī)范

?? ??? ?? ? 什么是構(gòu)造函數(shù)?

?? ??? ??? ??? ?? ? 簡單來說能產(chǎn)生對象的一個函數(shù)就是構(gòu)造函數(shù),構(gòu)造函數(shù)本身也是一個函數(shù)? ??


?? ??? ?? ? b.構(gòu)造函數(shù)方式

?? ??? ??? ??? ?? ? 構(gòu)造的函數(shù)首寫字母一般大寫,這個是約定俗稱的用于跟普通函數(shù)區(qū)分

?? ?? ???? ?? ? 構(gòu)造函數(shù)的語法:

?? ??? ??? ?? ? function Person(name, age,sex){//構(gòu)造函數(shù)的實(shí)例類型

?? ??? ??? ?? ? //屬性

?? ??? ??? ?? ? this.name=name; ? //實(shí)例屬性

?? ??? ??? ?? ? this.age=age;?? ?? ? //實(shí)例屬性

?? ?? ? ? ? ? ? this.sex=sex;?? ?? ? //實(shí)例屬性

?? ??? ??? ?? ? //方法

?? ??? ??? ?? ? this.eat=function( ){ ?//實(shí)例方法

?? ??? ??? ??? ??? ?? ? return? ? this.name+”在吃飯”;? ?

?? ??? ?}

?? ??? ??? ?? ? this.say=function(){ ?//實(shí)例方法

?? ??? ???? ??? ??? ?? ? return? ?this.name+”說:今年我”+this.age+”歲了”;

?? ??? ??}

}

?? ??? ??? ?? ? //對象

?? ??? ??? ?? ? var zs=new Person(?“張三”,20,“男”);//實(shí)例對象

?? ??? ??? ?? ? var lisi=new Person(“李四”,18,“女”) ;//實(shí)例對象


?? ??? ??? ?? ? 實(shí)例屬性:

?? ??? ??? ??? ??? ?? ? 在構(gòu)造函數(shù)內(nèi)部定義的屬性交實(shí)例屬性

?? ??? ??? ?? ? 實(shí)例方法:

?? ??? ??? ??? ??? ?? ? 在構(gòu)造函數(shù)內(nèi)部定義的方法叫實(shí)例方法


?? ??? ??? ?? ? 優(yōu)點(diǎn):

?? ??? ??? ??? ??? ??? ? 解決了創(chuàng)建多個同類對象代碼重復(fù)問題?

?? ??? ??? ??? ??? ?? ? ?解決了對象所屬不明確的類型

?? ??? ??? ??? ??? ?? ? ?代碼規(guī)范

?? ??? ??? ?? ? 缺點(diǎn):

?? ??? ??? ??? ??? ?? ? 實(shí)例方法在內(nèi)存空間占據(jù)的空間會很多,每new實(shí)例對象就會在內(nèi)存中開辟一個函數(shù)的空間

?? ??? ??? ??? ???來存放一個函數(shù),這樣的函數(shù)一般都是給所有的實(shí)例對象使用。這些方法都是公共的所以這里浪費(fèi)了內(nèi)存資源。

? ? ? ? c.構(gòu)造函數(shù)的原型

?? ??? ?? ? 原型(prototype)是一個對象保存,同時(shí)在另外一個空間里面也叫原型空間

?? ??? ??? ?? ? .prototype

?? ?? ? ? ? ? ? 是構(gòu)造函數(shù)下的原型對象。(是以屬性的情況存在)

?? ??? ??? ?? ? 可以在原型下面創(chuàng)建屬性跟方法

?? ??? ??? ?? ? 例如:

?? ??? ??? ??? ?? ? Person.prototype.phone=“122312312312312”;//原型屬性

?? ??? ??? ??? ?? ? Person.prototype.eat=function( ){return this.eat( );}//原型方法

?? ??? ??? ?? ? (原型只能直接被修改)

?? ??? ??? ?? ? 原型下的屬性和方法被所有的實(shí)例對象共享,一個改了,大家都改了。


? ? ? ? d.完整的面向?qū)ο蠓绞剑ɑ旌蠈ο蠓绞剑?/p>

?? ??? ??? ?? ? 私有(實(shí)例對象)的屬性寫在實(shí)例屬性里面。

?? ??? ??? ?? ? 共有(實(shí)例方法)的方法寫在原型下面。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容