成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

來自Chart.js的幾個(gè)JS helper function

Kross / 2233人閱讀

摘要:最近兼職的項(xiàng)目里面因?yàn)橐眠M(jìn)行數(shù)據(jù)的交互式可視化,用比較多,也踩了不少坑。內(nèi)部用這個(gè)進(jìn)行之類的時(shí),先深拷貝然后再擴(kuò)展,比較方便??梢钥闯鲋苯咏o原型進(jìn)行擴(kuò)展,寫起來非常簡(jiǎn)潔。

最近兼職的項(xiàng)目里面因?yàn)橐胏harts進(jìn)行數(shù)據(jù)的交互式可視化,用Chart.js比較多,也踩了不少坑。
為了改bug提pr外加學(xué)習(xí)一下提高姿勢(shì)水平花了一點(diǎn)時(shí)間看了下源碼,發(fā)現(xiàn)一些比較有用簡(jiǎn)介的helper function很值得學(xué)習(xí)及日常使用。

代碼
var helpers = {};

// -- Basic js utility methods
helpers.each = function(loopable, callback, self, reverse) {
    // Check to see if null or undefined firstly.
    var i, len;
    if (helpers.isArray(loopable)) {
        len = loopable.length;
        if (reverse) {
            for (i = len - 1; i >= 0; i--) {
                callback.call(self, loopable[i], i);
            }
        } else {
            for (i = 0; i < len; i++) {
                callback.call(self, loopable[i], i);
            }
        }
    } else if (typeof loopable === "object") {
        var keys = Object.keys(loopable);
        len = keys.length;
        for (i = 0; i < len; i++) {
            callback.call(self, loopable[keys[i]], keys[i]);
        }
    }
};
helpers.clone = function(obj) {
    var objClone = {};
    helpers.each(obj, function(value, key) {
        if (helpers.isArray(value)) {
            objClone[key] = value.slice(0);
        } else if (typeof value === "object" && value !== null) {
            objClone[key] = helpers.clone(value);
        } else {
            objClone[key] = value;
        }
    });
    return objClone;
};
helpers.extend = function(base) {
    var setFn = function(value, key) {
        base[key] = value;
    };
    for (var i = 1, ilen = arguments.length; i < ilen; i++) {
        helpers.each(arguments[i], setFn);
    }
    return base;
};
使用場(chǎng)景 helpers.each

提供了數(shù)組和Object統(tǒng)一的遍歷函數(shù),實(shí)際使用舉例:

helpers.each(scalesOptions.xAxes, function(xAxisOptions, index) {
  xAxisOptions.id = xAxisOptions.id || ("x-axis-" + index);
});
helpers.clone

提供了完整的深拷貝函數(shù),與常用的JSON.parse(JSON.stringify(obj))的區(qū)別在于這個(gè)函數(shù)可以深拷貝對(duì)象內(nèi)的函數(shù)。

Chart.js內(nèi)部用這個(gè)進(jìn)行config之類的merge時(shí),先深拷貝然后再擴(kuò)展,比較方便。

var base = helpers.clone(_base);
helpers.extend

Chart.js的設(shè)計(jì)思想包含了很多plugin形式,本身的Chart的核心功能也都有擴(kuò)展的方式定義的,關(guān)鍵就在extend。

helpers.extend(Chart.prototype, /** @lends Chart */ {
  /**
    * @private
    */
  construct: function(item, config) {
    // ...
  },

  /**
    * @private
    */
  initialize: function() {
    // ...
  },
  // ...
}

可以看出直接給原型進(jìn)行擴(kuò)展,寫起來非常簡(jiǎn)潔。

閱讀原文

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82815.html

相關(guān)文章

  • 編寫javascript模板引擎幾個(gè)步驟

    摘要:先推薦一個(gè)我自己寫的模板引擎,項(xiàng)目地址。下面就是總結(jié)的編寫模板引擎的幾個(gè)步驟例如一個(gè)模板為最終會(huì)編譯成為一個(gè)函數(shù)可以觀察到模板中的所有的變量名都被指定成了參數(shù)對(duì)象的屬性,并且該函數(shù)自始至終只做了一件事,就是構(gòu)建字符串,并將其返回。 showImg(https://segmentfault.com/img/remote/1460000007498588?w=300&h=113); 先推薦...

    xiaoxiaozi 評(píng)論0 收藏0
  • 聲明式與響應(yīng)式——前端新一代數(shù)據(jù)可視化方案

    摘要:數(shù)據(jù)可視化圖表圖表作為數(shù)據(jù)可視化最常見的表現(xiàn)形式之一,往往被以偏概全的認(rèn)為圖表就是數(shù)據(jù)可視化。嚴(yán)格來說,數(shù)據(jù)可視化應(yīng)該是連接數(shù)據(jù)與視覺的一個(gè)映射關(guān)系,將數(shù)據(jù)映射成人更容易感知其規(guī)律的可視化結(jié)果。 題目中的新一代是個(gè)相對(duì)的概念,事實(shí)上本文即將介紹的方法已經(jīng)有了生產(chǎn)環(huán)境可用的實(shí)現(xiàn)方案(這也側(cè)面佐證了其可行性),但考慮到此方法與現(xiàn)在大部分前端項(xiàng)目中所使用的數(shù)據(jù)可視化方案相比仍有一些優(yōu)勢(shì),因此...

    xuhong 評(píng)論0 收藏0
  • js函數(shù)調(diào)用模式和常用幾個(gè)方法

    摘要:一函數(shù)調(diào)用的種模式方法調(diào)用模式當(dāng)一個(gè)函數(shù)被保存為對(duì)象的一個(gè)屬性時(shí),我們稱它為一個(gè)方法。二函數(shù)常用的三個(gè)方法在指定值和參數(shù)參數(shù)以數(shù)組或類數(shù)組對(duì)象的形式存在的情況下調(diào)用某個(gè)函數(shù)。當(dāng)綁定函數(shù)被調(diào)用時(shí),該參數(shù)會(huì)作為原函數(shù)運(yùn)行時(shí)的指向。 一、函數(shù)調(diào)用的4種模式 (1) 方法調(diào)用模式 當(dāng)一個(gè)函數(shù)被保存為對(duì)象的一個(gè)屬性時(shí),我們稱它為一個(gè)方法。當(dāng)一個(gè)方法被調(diào)用時(shí),this 被綁定到該對(duì)象。如果調(diào)用表達(dá)...

    zhigoo 評(píng)論0 收藏0
  • 前端開發(fā)者常用的9個(gè)JavaScript圖表庫

    摘要:使用來呈現(xiàn)圖表。允許用戶在應(yīng)用程序中創(chuàng)建美觀的可復(fù)用的圖表。它是基于創(chuàng)建的,是一個(gè)以數(shù)據(jù)為中心的圖表庫,可以改進(jìn)數(shù)據(jù)可視化的效果。非常輕巧,并使用元素來創(chuàng)建很奇特的圖表。是庫中較為古老的圖表庫之一??偨Y(jié)以上介紹的庫都是高質(zhì)量的圖表庫。 當(dāng)前,數(shù)據(jù)可視化已經(jīng)成為數(shù)據(jù)科學(xué)領(lǐng)域非常重要的一部分。不同網(wǎng)絡(luò)系統(tǒng)中產(chǎn)生的數(shù)據(jù),都需要經(jīng)過適當(dāng)?shù)目梢暬幚恚员愀玫某尸F(xiàn)給用戶讀取和分析。 對(duì)任何一個(gè)...

    luck 評(píng)論0 收藏0
  • 利用h5,chart.js監(jiān)測(cè)手機(jī)三軸加速度,用以研究計(jì)步算法等

    摘要:用來判斷手機(jī)瀏覽器是否支持訪問硬件資源,通過上一句代碼來對(duì)該事件進(jìn)行監(jiān)聽,第一個(gè)參數(shù)是事件類型,第二個(gè)參數(shù)是一個(gè)對(duì)事件的處理,在總通過獲得加速器對(duì)象,分別獲取傳感器三個(gè)分量的參數(shù),這樣就完成了參數(shù)的獲取。 用window.DeviceMotionEvent來判斷手機(jī)瀏覽器是否支持訪問硬件資源,window.addEventListener(devicemotion,deviceMoti...

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

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

0條評(píng)論

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