国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

dayjs 源碼解析(五)(dayjs 插件詳解)

RaoMeng / 801人閱讀

摘要:前言上一篇源碼解析四類介紹了的源碼目錄結(jié)構(gòu)。接下來,本篇將分析一下中插件功能的用法源碼以及如何編寫自己的插件。并且,可以通過插件選項(xiàng),來對(duì)插件進(jìn)行配置。

前言

上一篇 dayjs 源碼解析(四)(Dayjs 類)介紹了 dayjs 的源碼目錄結(jié)構(gòu)。接下來,本篇將分析一下 dayjs 中插件功能的用法、源碼以及如何編寫自己的 dayjs 插件。

dayjs 插件用法

dayjs 的插件,通過掛載到 dayjs 函數(shù)下的 extend 函數(shù)加載,然后使用:

import plugin // 導(dǎo)入插件
dayjs.extend(plugin) // 加載插件
dayjs.extend(plugin, options) // 或者加載插件的同時(shí),加入插件所需要的參數(shù)

例子:使用官方的 IsLeapYear 插件

import isLeapYear from "dayjs/plugin/isLeapYear"

dayjs.extend(isLeapYear)

dayjs("2000-01-01").isLeapYear() // true

這就是 dayjs 插件的使用方法。

dayjs 插件源碼(即 dayjs.extend() 方法)
// 擴(kuò)展插件的方法
// plugin:插件函數(shù)
// option:插件的選項(xiàng)
dayjs.extend = (plugin, option) => {
  // 插件函數(shù)接受三個(gè)參數(shù)
  // 1.插件選項(xiàng) 2.Dayjs 類 3.dayjs 函數(shù)
  // 插件的方法都是掛載在 Dayjs 類的原型對(duì)象上的(Dayjs.prototype)。
  plugin(option, Dayjs, dayjs)
  return dayjs
}

dayjs.extend() 方法,接受兩個(gè)參數(shù),即插件(函數(shù))和插件的選項(xiàng)。

在 dayjs.extend() 方法中,直接調(diào)用傳入的插件(函數(shù)),且傳入三個(gè)參數(shù):傳入 dayjs.extend() 方法的 option、Dayjs 類以及 dayjs 函數(shù)。

最后,返回 dayjs 函數(shù)。

然后,我們來看一個(gè)官方的 isLeapYear 插件的源碼,看看它是怎么寫的:

export default (o, c) => {
  const proto = c.prototype
  proto.isLeapYear = function () {
    return ((this.$y % 4 === 0) && (this.$y % 100 !== 0)) || (this.$y % 400 === 0)
  }
}

在 isLeapYear 插件源碼中,導(dǎo)出一個(gè)函數(shù),該函數(shù)接受兩個(gè)參數(shù)(即在 dayjs.extend() 方法中的 option 和 Dayjs 類),然后將 isLeapYear 函數(shù)掛載到 Dayjs 類的原型對(duì)象上。因此,每個(gè) Dayjs 實(shí)例都可以使用 isLeapYear 方法。

編寫自己的 dayjs 插件

通過閱讀插件的源碼,我們知道了插件的方法,可以掛載到 Dayjs 類上、Dayjs 類原型上以及 dayjs 函數(shù)對(duì)象上。并且,可以通過插件選項(xiàng)(option),來對(duì)插件進(jìn)行配置。
官方文檔也提供了插件開發(fā)的模板:

export default (option, dayjsClass, dayjsFactory) => {
  // 擴(kuò)展 dayjs() 實(shí)例
  // 例:添加 dayjs().isSameOrBefore() 實(shí)例方法
  dayjsClass.prototype.isSameOrBefore = function (arguments) {}

  // 擴(kuò)展 dayjs 類
  // 例:添加 dayjs.utc() 類方法
  dayjsFactory.utc = (arguments) => {}

  // 覆蓋已存在的 API
  // 例:擴(kuò)展 dayjs().format() 方法
  const oldFormat = dayjsClass.prototype.format
  dayjsClass.prototype.format = function (arguments) {
    // 原始format結(jié)果
    const result = oldFormat(arguments)
    // 返回修改后結(jié)果
  }
}

通過插件,可以很方便的進(jìn)行 dayjs 庫(kù)的方法的擴(kuò)展,來更好的服務(wù)我們的具體的業(yè)務(wù)需求。

dayjs 源碼解析完。這五篇文章,也只是大概的解析了一下 dayjs 源碼的主要函數(shù)、方法和類,其他 api 方法還需要自己一個(gè)一個(gè)去看。?

總結(jié)

如何閱讀源碼?

先從庫(kù)的 api 入手,看其如何使用

然后再看源碼的入口函數(shù)或類,了解源碼的整體結(jié)構(gòu)

最后再具體看 api 的源碼

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/95982.html

相關(guān)文章

  • dayjs 源碼解析(一)(api)

    摘要:下面,我將自己閱讀的源碼的過程記錄下來。閱讀庫(kù)的代碼,首先先要知道這個(gè)庫(kù)的作用是一個(gè)輕量的時(shí)間日期處理庫(kù),其用法和完全一樣。介紹首先,閱讀的源碼,我們應(yīng)該從的入手。對(duì)象是不可變的,即所有改變的操作都會(huì)返回一個(gè)新的實(shí)例。 前言 作為一個(gè)程序員,閱讀別人優(yōu)秀代碼是提升自己技術(shù)能力的一個(gè)很好的方法。下面,我將自己閱讀 dayjs(v1.6.10)的源碼的過程記錄下來。 閱讀庫(kù)的代碼,首先先要...

    BlackMass 評(píng)論0 收藏0
  • dayjs 源碼解析(四)(Dayjs 類)

    摘要:前言上一篇源碼解析三構(gòu)造函數(shù)介紹了的源碼中的函數(shù)。接下來,本篇將解讀一下中的類。首先,我們看的構(gòu)造函數(shù),該構(gòu)造函數(shù)調(diào)用了實(shí)例方法,傳入?yún)?shù)在上一篇有講到。下一篇源碼解析五插件詳解 前言 上一篇 dayjs 源碼解析(三)(dayjs 構(gòu)造函數(shù))介紹了 dayjs 的源碼中的 dayjs 函數(shù)。接下來,本篇將解讀一下 index.js 中的 Dayjs 類。 class Dayjs { ...

    BicycleWarrior 評(píng)論0 收藏0
  • dayjs 源碼解析(二)(目錄結(jié)構(gòu))

    摘要:前言上一篇源碼解析一,介紹了一下的,知道了如何使用。本篇,介紹項(xiàng)目的目錄結(jié)構(gòu)。源碼解析三構(gòu)造函數(shù) 前言 上一篇 dayjs 源碼解析(一)(api),介紹了一下 dayjs 的 api,知道了如何使用 dayjs。本篇,介紹 dayjs 項(xiàng)目的目錄結(jié)構(gòu)。 目錄結(jié)構(gòu) showImg(https://segmentfault.com/img/bVbcW0Q?w=229&h=832); 在 ...

    Youngs 評(píng)論0 收藏0
  • dayjs 源碼解析(三)(dayjs 構(gòu)造函數(shù))

    摘要:接下來,本篇將解讀一下中的構(gòu)造函數(shù)。最后將傳入類的構(gòu)造函數(shù),生成一個(gè)對(duì)象,作為函數(shù)的返回值給返回了。參數(shù)通過上面對(duì)參數(shù)的分析知道了參數(shù)其實(shí)是當(dāng)參數(shù)為實(shí)例對(duì)象時(shí),最后又會(huì)調(diào)用函數(shù),此時(shí)才會(huì)傳入?yún)?shù)。 前言 上一篇 dayjs 源碼解析(二)(目錄結(jié)構(gòu))介紹了 dayjs 的源碼目錄結(jié)構(gòu)。接下來,本篇將解讀一下 index.js 中的 dayjs 構(gòu)造函數(shù)。 dayjs 構(gòu)造函數(shù) // ...

    ityouknow 評(píng)論0 收藏0
  • ?Day.js 2kB超輕量時(shí)間庫(kù) 和Moment.js一樣的API

    showImg(https://segmentfault.com/img/bV9wV7?w=1952&h=712);Moment.js 是一個(gè)大而全的 JS 時(shí)間庫(kù),很大地方便了我們處理日期和時(shí)間。但是 Moment.js太重了(200k+ with locals),可能一般項(xiàng)目也只使用到了她幾個(gè)常用的API。雖然社區(qū)也有幾個(gè)輕量的時(shí)間庫(kù),要想遷移過去又會(huì)增加新的學(xué)習(xí)和遷移成本。 如果能有一個(gè)和 ...

    CoreDump 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<