我必须删除画布中的形状。
编写了以下代码 -
function deleteCircle(circle, propName) {
for( i = 0; i < circle.length; i++) {
circle[i].erase();
}
}
circle.prototype.erase=function() {
delete this;
}
当我在i = 0运行此代码时,它将进入擦除功能。 但在第一次删除后,它不会回到deletecircle。 这只是一个粗略的代码......我只是在删除这个之后就是coonfused ....那是在删除对象之后doest代码回到deletecircle?
答案 0 :(得分: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);
答案 1 :(得分:0)
您的圈子对象没有erase
方法。在您的情况下,erase
是单独的功能,不会像这样工作。