根据现有对象有效地创建新的JavaScript对象

用户名

在现有对象的基础上创建新的JavaScript对象并使用新属性对其进行扩展的最佳实践是什么?

以下应该起作用,但是,我希望有一个更有效的解决方案。

<div class="chart" data-type="bar" data-title="My Bar Chart 1" data-foo="Hello"></div>
<div class="chart" data-type="pie" data-title="My Bar Pie" data-foo="Good Morning"></div>
<div class="chart" data-type="bar" data-title="My Bar Chart 2" data-foo="Good Day"></div>
<div class="chart" data-type="bar" data-title="My Bar Chart 3" data-foo="Good Evening"></div>

$('.charts').each(function(){
    $(this).highcharts($.extend( {}, {
        bar: {/* default settings for a bar chart  */ },
        pie: {/* default settings for a pie chart  */ },
        line:{/* default settings for a line chart */ }
      }[$(this).data('type')], {
        title: {text: $(this).data('title')},
        somethingElse: {foo: $(this).data('bar')}
            // ...
      } ));
});
Searlea

这里有一些想法:

  • 仅创建一次默认设置
  • $(this)每个循环仅调用一次
  • (可能)尝试调用$this.data()一次提取所有数据

注意:这是过早优化的经典案例。Highcharts将比您创建设置做更多的工作,因此优化设置对象的创建可能毫无意义!

结合了要点建议后,您的JS看起来应该像这样:

var defaults = {
    bar: {/* default settings for a bar chart  */ },
    pie: {/* default settings for a pie chart  */ },
    line:{/* default settings for a line chart */ }
};

$('.charts').each(function(){
    var $this = $(this),
        data = $this.data(),
        settings = $.extend(true, {}, defaults[data.type], {
            title: { text: data.title },
            somethingElse: { foo: data.bar },
            ...
        });
    $this.highcharts(settings);
});

注意:在不确切知道您的默认设置有多复杂的情况下,将true参数传递$.extend给确保jQuery进行深拷贝而不是浅拷贝是比较安全的。(这种对浅层深度的要求也是我没有回显@Maxx建议使用的原因Object.assign,因为这不会进行深层复制。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有效地迭代对象

来自分类Dev

有效地查找数组中对象的索引

来自分类Dev

有效地用相同的对象填充列表

来自分类Dev

有效地找到匹配的对象对

来自分类Dev

如何有效地“改变”不可变的对象?

来自分类Dev

使用Python有效地遍历对象变量

来自分类Dev

使用 Pandas 有效地根据现有列的值向新列添加值

来自分类Dev

如何有效地在通用方法内部创建对象列表?

来自分类Dev

从数组有效地或从功能上创建对象

来自分类Dev

如何有效地检查Javascript“字典”对象中是否存在键值对

来自分类Dev

如何有效地检测JavaScript中对象的任何键的存在?

来自分类Dev

如何有效地将 JavaScript 对象的值隔离到 Array 中?

来自分类Dev

如何有效地从对象访问父对象的父对象?

来自分类Dev

jq-根据现有对象创建新对象

来自分类Dev

如何有效地从(最初的)大对象列表中过滤出对象

来自分类Dev

如何有效地更改向量中所有对象的成员数据?

来自分类Dev

根据 r 中的名称列表有效地为新变量分配名称

来自分类Dev

有效地将2D数组转换为对象,从而消除JavaScript中的重复项

来自分类Dev

如何有效地根据其他索引变量上的条件创建变量?

来自分类Dev

如何使用Python根据交易数据有效地创建用户图?

来自分类Dev

使用javascript从现有对象中创建新对象

来自分类Dev

熊猫有效地创建和填充新数据框(?)

来自分类Dev

如何有效地将单个对象的许多C ++数据成员公开给QML?

来自分类Dev

删除X个对象后有效地重新排列List <Object>

来自分类Dev

如何有效地加载数百万个域对象

来自分类Dev

如何有效地在openGL中渲染大量对象?

来自分类Dev

有效地计算对象的位置,速度和其他运动导数

来自分类Dev

Python:在pandas GroupBy对象上有效地应用

来自分类Dev

如何有效地检索groupby对象作为pd.Series的函数

Related 相关文章

  1. 1

    有效地迭代对象

  2. 2

    有效地查找数组中对象的索引

  3. 3

    有效地用相同的对象填充列表

  4. 4

    有效地找到匹配的对象对

  5. 5

    如何有效地“改变”不可变的对象?

  6. 6

    使用Python有效地遍历对象变量

  7. 7

    使用 Pandas 有效地根据现有列的值向新列添加值

  8. 8

    如何有效地在通用方法内部创建对象列表?

  9. 9

    从数组有效地或从功能上创建对象

  10. 10

    如何有效地检查Javascript“字典”对象中是否存在键值对

  11. 11

    如何有效地检测JavaScript中对象的任何键的存在?

  12. 12

    如何有效地将 JavaScript 对象的值隔离到 Array 中?

  13. 13

    如何有效地从对象访问父对象的父对象?

  14. 14

    jq-根据现有对象创建新对象

  15. 15

    如何有效地从(最初的)大对象列表中过滤出对象

  16. 16

    如何有效地更改向量中所有对象的成员数据?

  17. 17

    根据 r 中的名称列表有效地为新变量分配名称

  18. 18

    有效地将2D数组转换为对象,从而消除JavaScript中的重复项

  19. 19

    如何有效地根据其他索引变量上的条件创建变量?

  20. 20

    如何使用Python根据交易数据有效地创建用户图?

  21. 21

    使用javascript从现有对象中创建新对象

  22. 22

    熊猫有效地创建和填充新数据框(?)

  23. 23

    如何有效地将单个对象的许多C ++数据成员公开给QML?

  24. 24

    删除X个对象后有效地重新排列List <Object>

  25. 25

    如何有效地加载数百万个域对象

  26. 26

    如何有效地在openGL中渲染大量对象?

  27. 27

    有效地计算对象的位置,速度和其他运动导数

  28. 28

    Python:在pandas GroupBy对象上有效地应用

  29. 29

    如何有效地检索groupby对象作为pd.Series的函数

热门标签

归档