0

我必须删除画布中的形状。

编写了以下代码-

  function deleteCircle(circle, propName) {
      for( i = 0; i < circle.length; i++) {
        circle[i].erase();      
      }
    }
   circle.prototype.erase=function() {
      delete this;
    }

当我在 i=0 运行此代码时,它将进入擦除功能。但在第一次删除后,它不会回到 deletecircle。这只是一个粗略的代码......我只是感到困惑,在删除这个......之后,在对象被删除之后,代码会回到 deletecircle 吗?

4

2 回答 2

1

正如其他用户所说,在循环期间修改数组的大小是一个坏主意。尝试:

var circle = new Array();
circle[0]=1;
circle[1]=2;
circle[2]=3;
circle[3]=4;

function deleteCircle(circle, propName) {
    while(circle.length!==0){
        erase(circle.pop());
    }
}
function erase(elem){
    delete elem;
}

alert(circle.length);
deleteCircle(circle,null);
alert(circle.length);

现场演示

编辑:抱歉没有注意到您更改了代码。更新:

function circle(){};
circle.prototype.erase = function(){
    delete this;
}

var circles = [new circle, new circle, new circle];

function deleteCircle(circle, propName) {
    while(circle.length!==0){
        circle.pop().erase();
    }
}

function circle(){}; //or however you define your class
circle.prototype.erase = function(){ //extend the class
    delete this;
}

var circles = [new circle, new circle, new circle]; //your array

function deleteCircle(circle, propName) {
    while(circle.length!==0){
        circle.pop().erase();
    }
}

alert(circles.length);
deleteCircle(circles,null);
alert(circles.length);

现场演示

于 2012-08-16T09:24:36.273 回答
0

您的圆形对象没有erase方法。在你的情况下erase是单独的功能,不会像这样工作。

于 2012-08-16T09:10:01.707 回答