代码之家  ›  专栏  ›  技术社区  ›  Shouvik

JavaScript语法有疑问吗?(工具)

  •  0
  • Shouvik  · 技术社区  · 14 年前

    编辑:这太复杂了,我会把这个问题转移到另一个问题,并把我的新代码在那里!请忽略上面的代码,因为它在逻辑上有缺陷。(请投票结束这个问题,因为它没有意义)

    你好,

    我正在初始化代码中的以下循环。代码是使用mootools编写的。

    CANVAS.init({ canvasElement : 'canvas', interactive : true });
    
    var itemlayer = CANVAS.layers.add({ id : 'items' });
    
    for(var j = 0; j < 5; j++)
    {
      for(var i = 0; i < 5; i++)
      {
    
        itemlayer.add({
    
            id : 'item-'+i + '-' + j,
            x : 51 * i,
            y : 51 * j,
            w : 50,
            h : 50,
            state : 'normal',
            interactive : true,
            colors : { normal : '#f00', hover : '#00f' },
            events : {
                onDraw : function(ctx){
    
                        ctx.fillStyle = this.colors[this.state];
                        ctx.fillRect(this.x,this.y,this.w,this.h);
    
                        this.setDims(this.x,this.y,this.w,this.h);
                }
            }
    
        });
    
    
    }
    
    }
    
    
    
    /* object that hold the information whether a certain object
     * is in animation right now or not. This is used to prevent
     * multiple Cmorph instances working on the same item
     * */
    
      var locked= {};
      for(i= 0; i<6; i++)
      for(j= 0; j<6; j++)
      {
        itemid = 'item-'+i+'-'+j;
        itemid : false,
      }
        //then once I have done that
        //animate all items with the function given below
    
        function animate()
        {
       for(i=0;i<6;i++)
            for(j=0;j<6;j++)
            {
              itemid = 'item-'+i+'-'+j;
              if(locked.itemid)return;  //guess even this will return errors!
          locked.itemid = true;
          var item = CANVAS.layers.get('myLayer').get(itemid);
    
                      new Cmorph(item,{
                        duration : 1000,
                        transition : 'bounce:out',
                        onComplete : function()
                        {
                            locked.itemid = false;
                        }
                    }
          ).morph({
            y : (item.y == 50?375:50),
            scale : (item.scale == 1?2:1)
        });
           }
        }
    
        CANVAS.addThread(new Thread({
                id : 'myThread',
                onExec : function(){
                        CANVAS.clear().draw();
                }
        }));​
    

    我的语法正确吗?所有的id都会被锁定还是会出错。如果我犯了错误,你能纠正我吗。我知道这是一个非常愚蠢的怀疑,但请容忍我!谢谢:)

    4 回复  |  直到 14 年前
        1
  •  2
  •   jwueller    14 年前

    我不太清楚你说的“锁定”是什么意思,但语法有一些错误。我会这样做:

    var locked = [];
    for (var i = 0; i < 6; i++) {
        for (var j = 0; j < 6; j++) {
            locked.push("item-"+i+"-"+j);
        }
    }
    

    它构造一个字符串数组,保存您的项目字符串。

    {} ). 如果需要这种(更复杂的)行为,您需要创建它,然后再填充它。

    编辑: for } . 另一方面,我不知道mootools的细节,所以可能会有mootools相关的问题遗留下来。

        2
  •  0
  •   Sachin Shanbhag    14 年前

    不能锁定对象。相反,您可以使用数组作为锁定-

    var locked = [];
    for (var i = 0; i < 6; i++) { 
        for (var j = 0; j < 6; j++) { 
            var itemStr = "item-"+i+"-"+j;
            locked.push(itemStr); 
        } 
    } 
    

    locked[index]

        3
  •  0
  •   user69820 user69820    14 年前

    我不知道你所说的“锁定”是什么意思,但你是在试图创建一个使用 itemid s作为属性,哪些属性设置为false?

    /* create empty object */
    var locked = {};
    /* loop & populate */
    for(var i = 0; i < 6; i++) {
        for(var j = 0; j < 6; j++) {
            var itemStr = "item-" + i + "-" + j;
            locked[itemStr] = false;
        }
    }
    
    /* use id */
    if(!locked["item-0-0"]) {
       // do something
    }
    
        4
  •  0
  •   bobince    14 年前

    你的问题不清楚,但我想你的意思是:

    var locked= {};
    for(i= 0; i<6; i++)
        for(j= 0; j<6; j++)
            locked['item-'+i+'-'+j]= false;
    

    JavaScript中的名称 {name: value} 对象文字仅限于作为字符串的带引号的字符串或不带引号的文字名称,而不是一般表达式。所以在对象文本中不能有变量名。相反,您必须在创建之后使用 [] a['b'] 与相同 a.b