欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ā)的時候經常會忘了兼容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
// 修改第一個入參,橫崗改斜杠
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的其他功能也能正常使用

總結

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

相關文章

  • js活用事件觸發(fā)對象動作

    js活用事件觸發(fā)對象動作

    現(xiàn)在基本上我很少在對象里面寫事情觸發(fā)行為了,因為感覺那樣做相同的對象代碼利用率太低,容易導致代碼冗余.
    2008-08-08
  • 原生js實現(xiàn)電子時鐘

    原生js實現(xiàn)電子時鐘

    這篇文章主要為大家詳細介紹了原生js實現(xiàn)電子時鐘,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • javascript 有用的腳本函數(shù)

    javascript 有用的腳本函數(shù)

    大家注意看下,感覺應該是批量給網頁的一些標簽加樣式的函數(shù)。
    2009-05-05
  • JS提示:Uncaught SyntaxError:Unexpected token ) 錯誤的解決方法

    JS提示:Uncaught SyntaxError:Unexpected token ) 錯誤的解決方法

    這篇文章主要介紹了JS提示:Uncaught SyntaxError:Unexpected token ) 錯誤的解決方法,結合實例形式分析了javascript提示此類異常的常見原因與相關解決方法,需要的朋友可以參考下
    2016-08-08
  • 淺談ES6 模板字符串的具體使用方法

    淺談ES6 模板字符串的具體使用方法

    本篇文章主要介紹了淺談ES6 模板字符串的具體使用方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • uniapp獲取頁面高度與元素高度簡單示例

    uniapp獲取頁面高度與元素高度簡單示例

    在實際開發(fā)中我們會遇到不確定高度的情況,那么在uniapp中我們如何獲取區(qū)域的高度吶?這篇文章主要給大家介紹了關于uniapp獲取頁面高度與元素高度的相關資料,需要的朋友可以參考下
    2023-09-09
  • canvas繪制刮刮卡效果

    canvas繪制刮刮卡效果

    這篇文章主要為大家詳細介紹了canvas繪制刮刮卡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • JavaScript函數(shù)定義的常見注意事項小結

    JavaScript函數(shù)定義的常見注意事項小結

    這篇文章主要介紹了JavaScript函數(shù)定義的常見注意事項,包含了常見的錯誤及注意事項,需要的朋友可以參考下
    2014-09-09
  • JavaScript兼容瀏覽器FF/IE技巧

    JavaScript兼容瀏覽器FF/IE技巧

    本文給大家分享的是一個JavaScript兼容火狐瀏覽器與IE瀏覽器的一個小技巧,非常的簡單實用,有需要的小伙伴可以參考下
    2016-08-08
  • jquery $(document).ready()和window.onload的區(qū)別淺析

    jquery $(document).ready()和window.onload的區(qū)別淺析

    這篇文章主要介紹了jquery $(document).ready()和 window.onload的區(qū)別淺析,本文總結了執(zhí)行時間、編寫個數(shù)不同、簡化寫法等不同的地方,需要的朋友可以參考下
    2015-02-02

最新評論