2012-08-16 119 views
0

我必須刪除畫布中的形狀。當我在我運行此代碼= 0這是要擦除函數運行函數時出錯

以下代碼是須寫

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

。 但在第一次刪除後,它不會回到刪除環。 這只是一個粗略的代碼...我只是coonfused之後刪除這個....那是刪除對象後做的代碼回來刪除環?

+0

我假定一個誤差在'擦除()',其防止循環持續發生。你有沒有檢查錯誤日誌? – Curt 2012-08-16 09:08:13

+0

您正在修改循環內數組的長度 - 這是一個壞主意。 – 2012-08-16 09:08:20

+0

加'我'是漏水的。 – elclanrs 2012-08-16 09:09:09

回答

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); 

LIVE DEMO

編輯:很抱歉沒注意到你改變了代碼。更新:

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); 

LIVE DEMO

0

您的圈子對象沒有erase方法。在你的情況下,erase是獨立的功能,不會像這樣工作。

+0

我已經在我的圈子對象中進行了擦除功能。我編輯了代碼。請檢查 – 2012-08-16 09:12:54