最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS重寫Date函數(shù)以及兼容IOS系統(tǒng)

 更新時間:2023年10月23日 10:46:32   作者:milugloomy  
這篇文章主要介紹了JS重寫Date函數(shù)以及兼容IOS系統(tǒng),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

IOS系統(tǒng)Date的坑

要創(chuàng)建一個指定時間的new Date對象時,通常的做法是:

new Date("2020-09-21 11:11:00")

這行代碼在 PC 端和安卓端都是正常的,而在 iOS 端則會提示 Invalid Date 無效日期。在IOS年月日中間的橫崗許換成斜杠,也就是

new Date("2020/09/21 11:11:00")

通常為了兼容IOS的這個坑,需要做一些額外的特殊處理,筆者在開發(fā)的時候經(jīng)常會忘了兼容IOS系統(tǒng)。

所以就想試著重寫Date函數(shù),一勞永逸,避免每次new Date都要考慮兼容性的問題。

分析

JS中要重寫類,分為3步

  • 重寫構造函數(shù)
  • 繼承原類的原型鏈函數(shù)
  • 繼承原類的靜態(tài)函數(shù)

1、 重寫Date構造函數(shù)

重寫構造函數(shù),考慮到構造函數(shù)傳參可能會傳Number格式的時間戳,所以重寫Date的構造函數(shù),判斷3個:

  • 是否包含第一個參數(shù)
  • 第一個參數(shù)類型是否為String
  • 第一個參數(shù)是否包含短橫崗-

代碼如下

const OldDate = Date
// 修改第一個入?yún)?,橫崗改斜杠
Date = function () {
  if (arguments.length > 0 && typeof (arguments[0]) === 'string' && arguments[0].includes('-')) {
    const p = arguments[0].replace(/-/g, '/')
    arguments[0] = p
  }
  return new OldDate(...arguments)
}

2、 繼承原型函數(shù)

這個簡單,指向原類的原型鏈即可,代碼如下

Date.prototype = OldDate.prototype

3、 繼承靜態(tài)函數(shù)

每個類在創(chuàng)建出來的時候都會有默認的靜態(tài)函數(shù),只需要繼承原類有的而重寫后Date沒有的靜態(tài)函數(shù),代碼如下:

const oldDateStaticParam = Object.getOwnPropertyNames(OldDate)
const dateStaticParam = Object.getOwnPropertyNames(Date)
const diffParam = []
for (let i = 0; i < oldDateStaticParam.length; i++) {
  let find = false
  for (let j = 0; j < dateStaticParam.length; j++) {
    if (oldDateStaticParam[i] === dateStaticParam[j]) {
      find = true
      break
    }
  }
  if (!find) {
    diffParam.push(oldDateStaticParam[i])
  }
}
for (let i = 0; i < diffParam.length; i++) {
  Date[diffParam[i]] = OldDate[diffParam[i]]
}

完整代碼

function wrapDate () {
  const OldDate = Date
  // 重寫arguments[0]
  Date = function () {
    if (arguments.length > 0 && typeof (arguments[0]) === 'string' && arguments[0].includes('-')) {
      const p = arguments[0].replace(/-/g, '/')
      arguments[0] = p
    }
    return new OldDate(...arguments)
  }
  // 繼承原型函數(shù)
  Date.prototype = OldDate.prototype
  // 繼承靜態(tài)函數(shù),過濾已有的靜態(tài)函數(shù)和參數(shù),取數(shù)組差集
  const oldDateStaticParam = Object.getOwnPropertyNames(OldDate)
  const dateStaticParam = Object.getOwnPropertyNames(Date)
  const diffParam = []
  for (let i = 0; i < oldDateStaticParam.length; i++) {
    let find = false
    for (let j = 0; j < dateStaticParam.length; j++) {
      if (oldDateStaticParam[i] === dateStaticParam[j]) {
        find = true
        break
      }
    }
    if (!find) {
      diffParam.push(oldDateStaticParam[i])
    }
  }
  for (let i = 0; i < diffParam.length; i++) {
    Date[diffParam[i]] = OldDate[diffParam[i]]
  }
}
// IOS環(huán)境
if (navigator.userAgent.includes('iPhone') || navigator.userAgent.includes('iPad')) {
  compatIos()
}
const date1 = new Date('1997-11-11 11:11:11')
console.log(date1)
const date2 = new Date('1997/11/11 11:11:11')
console.log(date2)

測試運行通過,在IOS端是正常的,Date的其他功能也能正常使用

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • javascript中call和apply的用法示例分析

    javascript中call和apply的用法示例分析

    這篇文章主要介紹了javascript中call和apply的用法示例分析,非常的詳細,需要的朋友可以參考下
    2015-04-04
  • 基于JavaScript實現(xiàn)簡單的隨機抽獎小程序

    基于JavaScript實現(xiàn)簡單的隨機抽獎小程序

    為了使抽獎程序能夠無需配置平臺直接可以在任何一臺機器上運行,開發(fā)工具和編譯運行工具也能夠盡可能簡單(諸如text文本即可編輯,window系統(tǒng)自帶的瀏覽器即可編譯運行的情況),決定嘗試使用javascript來做
    2016-01-01
  • EasyUi中的Combogrid 實現(xiàn)分頁和動態(tài)搜索遠程數(shù)據(jù)

    EasyUi中的Combogrid 實現(xiàn)分頁和動態(tài)搜索遠程數(shù)據(jù)

    jquery easyui中的combogrid比較特殊,算是combo和grid的組合,combogrid結合一個可編輯的文本框和下拉數(shù)據(jù)網(wǎng)格面板,可以讓用戶迅速找到并選擇,又可以進行搜索,展示與當前輸入的字符相匹配的數(shù)據(jù)。下面給大家介紹EasyUi中的Combogrid 實現(xiàn)分頁和動態(tài)搜索遠程數(shù)據(jù)
    2016-04-04
  • ES6函數(shù)和數(shù)組用法實例分析

    ES6函數(shù)和數(shù)組用法實例分析

    這篇文章主要介紹了ES6函數(shù)和數(shù)組用法,結合實例形式分析了ES6函數(shù)和數(shù)組基本功能、原理、用法與操作注意事項,需要的朋友可以參考下
    2020-05-05
  • 微信公眾平臺開發(fā)教程(四) 實例入門:機器人回復(附源碼)

    微信公眾平臺開發(fā)教程(四) 實例入門:機器人回復(附源碼)

    本篇文章主要介紹了微信公眾平臺開發(fā)機器人,可以實現(xiàn)簡單對話和查詢天氣等,有需要的可以了解一下。
    2016-12-12
  • javascript實現(xiàn)移動端紅包雨頁面

    javascript實現(xiàn)移動端紅包雨頁面

    這篇文章主要為大家詳細介紹了javascript實現(xiàn)移動端紅包雨頁面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • BootStrap 圖片樣式、輔助類樣式和CSS組件的實例詳解

    BootStrap 圖片樣式、輔助類樣式和CSS組件的實例詳解

    這篇文章主要介紹了BootStrap 圖片樣式、輔助類樣式和CSS組件的實現(xiàn)代碼,圖文并茂介紹的非常詳細,需要的朋友參考下吧
    2017-01-01
  • JS流式模式輸出函數(shù)模式使用詳解

    JS流式模式輸出函數(shù)模式使用詳解

    文章介紹了傳統(tǒng)接口模式與AI項目需求不符的問題,提出了流式模式和回調函數(shù)模式來解決,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2026-04-04
  • 詳解JS中遍歷語法的比較

    詳解JS中遍歷語法的比較

    本篇文章主要介紹了詳解JS中遍歷語法的比較 ,主要介紹for循環(huán)、forEach、for...in、for...of的用法和缺點,有興趣的可以了解一下。
    2017-04-04
  • js實現(xiàn)簡單鎖屏功能實例

    js實現(xiàn)簡單鎖屏功能實例

    這篇文章主要介紹了js實現(xiàn)簡單鎖屏功能的方法,實例分析了javascript操作頁面元素顯示與隱藏的相關技巧,涉及javascript操作元素屬性與鼠標、鍵盤事件的相關技巧,需要的朋友可以參考下
    2015-05-05

最新評論

浮山县| 高尔夫| 青岛市| 乌鲁木齐县| 古丈县| 鄂温| 大同市| 饶阳县| 新野县| 海盐县| 白河县| 金坛市| 滨州市| 合山市| 太谷县| 石狮市| 上饶县| 永丰县| 绥棱县| 兴和县| 大化| 广宁县| 保山市| 铜川市| 贵定县| 南昌市| 教育| 尼勒克县| 遵义市| 龙海市| 遂宁市| 抚松县| 嘉定区| 普洱| 东乌珠穆沁旗| 鞍山市| 龙海市| 鄯善县| 邵武市| 宁都县| 杂多县|