摘要:最近兼職的項(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
摘要:先推薦一個(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); 先推薦...
摘要:數(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ì),因此...
摘要:一函數(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á)...
摘要:使用來呈現(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è)...
摘要:用來判斷手機(jī)瀏覽器是否支持訪問硬件資源,通過上一句代碼來對(duì)該事件進(jìn)行監(jiān)聽,第一個(gè)參數(shù)是事件類型,第二個(gè)參數(shù)是一個(gè)對(duì)事件的處理,在總通過獲得加速器對(duì)象,分別獲取傳感器三個(gè)分量的參數(shù),這樣就完成了參數(shù)的獲取。 用window.DeviceMotionEvent來判斷手機(jī)瀏覽器是否支持訪問硬件資源,window.addEventListener(devicemotion,deviceMoti...
閱讀 9078·2021-11-18 10:02
閱讀 2620·2019-08-30 15:43
閱讀 2668·2019-08-30 13:50
閱讀 1388·2019-08-30 11:20
閱讀 2714·2019-08-29 15:03
閱讀 3636·2019-08-29 12:36
閱讀 936·2019-08-23 17:04
閱讀 625·2019-08-23 14:18