博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
来自Chart.js的几个JS helper function
阅读量:5798 次
发布时间:2019-06-18

本文共 2083 字,大约阅读时间需要 6 分钟。

最近兼职的项目里面因为要用charts进行数据的交互式可视化,用Chart.js比较多,也踩了不少坑。

为了改bug提pr外加学习一下提高姿势水平花了一点时间看了下源码,发现一些比较有用简介的很值得学习及日常使用。

代码

var helpers = {};// -- Basic js utility methodshelpers.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;};

使用场景

helpers.each

提供了数组和Object统一的遍历函数,实际使用举例:

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

helpers.clone

提供了完整的深拷贝函数,与常用的JSON.parse(JSON.stringify(obj))的区别在于这个函数可以深拷贝对象内的函数。

Chart.js内部用这个进行config之类的merge时,先深拷贝然后再扩展,比较方便。

var base = helpers.clone(_base);

helpers.extend

Chart.js的设计思想包含了很多plugin形式,本身的Chart的核心功能也都有扩展的方式定义的,关键就在extend。

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

可以看出直接给原型进行扩展,写起来非常简洁。

转载地址:http://svsfx.baihongyu.com/

你可能感兴趣的文章
Eclipse CDT 出现 launch failed Binary not found
查看>>
Java class反编译的方法总结
查看>>
关于js的setTimeout
查看>>
wikioi 1078 最小生成树 Kruskal算法
查看>>
PHP mongoDB 操作
查看>>
内容提供者Content Provider
查看>>
jquery------添加jQuery对象方法
查看>>
CentOS 7拨号上网(ADSL & PPPoE)
查看>>
Android静默安装和静默卸载代码
查看>>
Java中Dom解析xml文档
查看>>
nginx 出现413 Request Entity Too Large问题的解决方法
查看>>
在有跳板机的情况下,SecureCRT自动连接到目标服务器
查看>>
【C语言入门教程】7.2 结构体数组的定义和引用
查看>>
zookeeper部署及集群测试
查看>>
BZOJ 3456: 城市规划 [多项式求逆元 组合数学 | 生成函数 多项式求ln]
查看>>
视频会议及流媒体十大开源项目
查看>>
windows pipe
查看>>
go语言中结构struct
查看>>
【shiro】关于shiro匹配URL的小用法
查看>>
DbVisualizer Personal 中文乱码问题的通用解决方法
查看>>