其實,只是再多想一點

Jquery再熟悉不過,其中的$.ajax封裝也不陌生,其中

$.ajax({
    url:url,
    type:"GET",
    data:data,
    success:function(res){
        
    },
    error:function(err){
        
    }
});

之前比較喜歡success固定回調這種寫法,很清晰
接下來實現success和error這種語法前端

var $={
    ajax(call){
        if(call.bol){
          call.success("成功的回調");  
        }else{
            console.error("bol is undefined");//提示
        }
    }
}

調用:java

$.ajax({
    bol:false,//切換bol存在便可調用成功回調
    success:function(res){
        console.log(res);
    },
    error:function(err){
        console.log(err);
    }
});
相似物流信息,後臺返回一個字符串,前端識別出連續的11位數字,而且可撥打電話

作這裏的時候,想要跟後臺多要一個字段爲電話,前端再a標籤直接包起來。可是後臺接的也是三方,三方返回就是一個整串......
後來仔細想一想這個流程,即便後臺多給一個字段,這需求同樣作不完美
好比這個串是這樣的:ajax

'您的快遞正在配送,配送員電話:17600699305,某某快遞持續爲您服務'

後臺分了倆字段
'str1=您的快遞正在配送,配送員電話:,某某快遞持續爲您服務' str2='17600699305'
這個str2插到str1的哪裏呢?顯然也很差弄。
那還不如不麻煩後臺,前端本身消化。
'識別連續的11位數字',第一想到的就是正則:算法

var str='您的快遞正在配送,配送員電話:17600699305,某某快遞持續爲您服務',strCon=str.match(/\d{11}/);

match符合條件會返回一個數組,包含 匹配到的內容,內容的開始下標,整個內容,還有個groups(求釋義)
接下來封裝實現:數組

function continuFunc(str){
    var strBol=str.match(/\d{11}/);
    if(strBol){
       return strBol.input.slice(0,strBol.index)+'<a href="tel:'+strBol[0]+'">'+strBol[0]+'</a>'+strBol.input.slice(strBol.index+strBol[0].length,str.length);
    }
}

就是分紅三個部分返回,以匹配到的11位連續數字爲節點,先後各爲兩部分,再進行拼接。
index就是匹配區的開始下標,因此第一部分從0取到下標,第二部分已經返回,第三部分取index+字符長度(11)——結尾函數

toFixed()方法如何實現(保留n位小數)

剛開始看到是否是很慌,這方法調用的時候都是Number.toFixed(),而常規的函數封裝都是優化

function Func(argu){
    return argu;
}

調用都是Func('調用');,很慌。
這種函數基本都是綁定在原型上的,不難發現,調用toFixed方法的都是Number類型,因此toFixed方法應該就是綁定在Number的prototype了,接下來分析內部實現問題this

Number.prototype.toDiyFixed=function(n){
    return (Math.round(this * Math.pow( 10, n ))/ Math.pow( 10, n)).toString();
}

調用var num=100.123, a.toDiyFixed(2)獲得100.12。
toDiyFixed方法就成功的copy了toFixed方法。
a=100.123這個例子講實現原理:把原數 num先乘以100(n是多少就乘以10的幾回方),再進行四捨五入,(去除小數兩位以後的小數,由於乘以100之後,前兩位小數已經變爲整數部分,四捨五入操做就不會影響了),至此完成保留2(n)位小數的操做。
注意:可是,這個方法有個問題,就是不會自動向末尾補0,好比說100.196保留兩位小數應該獲得100.20,可是該方法只能拿到100.2,100.201應該獲得100.20,但該方法獲得100.2,目前還沒想到解決辦法,歡迎一塊兒交流探討,可是基礎功能能夠實現.
另外說個原生toFixedbug:
0.7.toFixed(0)發現獲得的是1(IE)
0.0350.045保留兩位小數後獲得的都是0.04(Chrom),固然若是以爲這點偏差無所謂,10.3510.45保留兩位小數獲得10.310.4發現都是錯的,這是不容小覷的數字了吧,後來查閱資料說,jstoFixed方法用的是」銀行家算法「,實質就是 」四捨六入無成雙「,那啥意思呢,當捨去位的數值小於5時,直接捨去該位;當捨去位的數值大於等於6時,在捨去該位的同時向前位進一;當捨去位的數值等於5時,若是前位數值爲奇,則在捨去該位的同時向前位進一,若是前位數值爲偶,則直接捨去該位。
按照這個說法,在Chrom仍是行不通的,10.35應該獲得10.4,10.45獲得10.4沒問題,有些摸不到邊了,因此自定義一下toDiyFixed這個方法以便備用url

總結:

javaScript日益強大,各類語言逐步向它靠近。(✌️) 開發中通常時間很緊迫,好多東西都沒工夫想,因此還有不少要優化的地方,有時候,放慢腳步,可能也是一種進步吧!prototype

相關文章
相關標籤/搜索