这是我写的排序代码(不同高度的柱形条)的一部分,就是交换两个数字的位置,排序正常。
Array.prototype.swap=function(a, b)
{   
    var tmp=this[a];
    this[a]=this[b];
    this[b]=tmp;
    document.getElementById("div"+a).style.width = this[a]+'px';
    document.getElementById("div"+b).style.width = this[b]+'px';
}
我想交换位置有一定的延迟,就改成了如下代码:
Array.prototype.swap=function(a, b)
{   
    setTimeout(function(){
    var tmp=this[a];
    this[a]=this[b];
    this[b]=tmp;
    document.getElementById("div"+a).style.width = this[a]+'px';
    document.getElementById("div"+b).style.width = this[b]+'px';
},100);
}
但是再次执行排序确根本不执行,为什么啊?thanks!

解决方案 »

  1.   

    里面的this值变了吧,试一下用call
      

  2.   

    应该是this引起的 。
    你把this[a] this[b]都先放到外面来  。
      

  3.   

    又想到一个思路
    Array.prototype.swap=function(a, b)
    {   var that = this;
      setTimeout(function(){
    var tmp=that[a];
    that[a]=that[b];
    that[b]=tmp;
    document.getElementById("div"+a).style.width = that[a]+'px';
    document.getElementById("div"+b).style.width = that[b]+'px';
    },100);
    }
      

  4.   

    谢谢。怎么放外面来?我想隔一段时间执行一条语句,等这语句执行完毕再执行下一条应该怎么写啊?setTimeout是异步函数,应该不能实现这功能吧?有什么办法么?
      

  5.   

    谢谢。虽然能执行了,但是结果不正确,没时间延迟,并且柱形条高度变了。我想隔一段时间执行一条语句,等这语句执行完毕再执行下一条应该怎么写啊?setTimeout是异步函数,应该不能实现这功能吧?有什么办法么?
      

  6.   

    Array.prototype.swap=function(a, b)
    {   
      setTimeout(function(){
    var tmp=this[a];
    this[a]=this[b];
    this[b]=tmp;
    document.getElementById("div"+a).style.width = this[a]+'px';
    document.getElementById("div"+b).style.width = this[b]+'px';
    },100).call(this);
    }这样也不行?