在对象内执行函数

时间:2016-09-15 00:00:36

标签: javascript arrays function object

我正在使用一组对象来随机打印画布中的项目。每个对象应该有不同的随机颜色,但我编写代码的方式每个对象都得到相同的颜色。

var arrayOfObjects = [
    {x: 1, y: 5, r: 10, color: pickColor}, //gets random color
    {x: 2, y: 6, r: 10, color: pickColor}  // should get a different color
    //and so on...
];

我试图将pickColor变量替换为要在每个对象内执行的函数,以便它们都获得不同的颜色,但我似乎无法使用此值来选择颜色数组中的颜色

这显然不起作用:

{x: 1, y: 5, r: 10, color: colorList[parseInt(Math.random() * colorList.length)]},
编辑:这段代码有效,问题来自一条显然不相关的行,调试工具没有提示。 谢谢你的回答

1 个答案:

答案 0 :(得分:0)

使var colorList = ["#E57373", "#F06292", "#BA68C8", "#9575CD", "#7986CB", "#64B5F6", "#DCE775", "#AED581", "#81C784", "#FFD54F"]; function pickColor() { var randIndex = parseInt(Math.random() * colorList.length); return colorList[randIndex]; } var arrayOfObjects = [ {x: 1, y: 5, r: 10, color: pickColor()}, {x: 2, y: 6, r: 10, color: pickColor()}, //and so on... ]; 成为一个函数并多次调用它:

var lastId = null;
function toggle_visibility(id) {
      if (lastId && id != lastId) {
          var lastEl = document.getElementById(lastId);
          lastEl.style.display = 'none';
      }
      lastId = id;
      var e = document.getElementById(id);
      if(e.style.display == 'block')
         e.style.display = 'none';
      else
         e.style.display = 'block';
      }

效果与第二个片段中的效果相同,除非您不必为每个对象重复自己。