簡體   English   中英

如何徹底清除

[英]how to completely remove

請幫助刪除新的項目符號。 jsfiddle

在對象之后,它從下向上在屏幕上移動。 使用y <= 5px進行協調,方法可以使用helper.deleteElement(),但是該對象仍然存在(請參閱console-console.log('move');)

我需要徹底移除

js:

Bullet = function(bulletId){ 
    var self = this;

    self.id = bulletId; 
    self.x = 100;   
    self.y = 500;   

    self.move = function(){ 
        console.log('move');

        var offsetY = -10,
            newY = self.y + offsetY;

        if(newY <= 5){
            helper.deleteElement(self.id);

            if(observerable.removeListener(this, "makeMoveBullet", "move")){
                console.log('dont worked!');
            }
        }   

        self.y = newY;

        self.render(self.x, newY);      

        return;
    };      

    self.render = function(x, y){       
        $('#' +self.id).css({
            'left': (self.x = x || self.x) + 'px',
            'top': (self.y = y || self.y) + 'px'
        }).appendTo('#wrap');   

        return;
    };

    self.init = function(playerX, playerY){
        $('<div class="bullet" id="' + self.id + '"  />').appendTo('#wrap');

        self.x = playerX + 31;
        self.y = playerY - 9;

        self.render(self.x, self.y);

        return;
    };
}; 


// ------------------------------------------------------------------------------------ observer
var observerable = {
    listeners: {},

    addListener: function (object, evt, callback) {       
        if (!this.listeners.hasOwnProperty(evt)) {           
            this.listeners[evt] = [];    
        }        

        this.listeners[evt].push(object[callback]);       
    },

    removeListener: function (object, evt, callback) {       
        if (this.listeners.hasOwnProperty(evt)) {      
            var i, length;     
                    
            for (i = 0, length = this.listeners[evt].length; i < length; i += 1) {               
                if (this.listeners[evt][i] === object[callback]) {                   
                    this.listeners[evt].splice(i, 1);        
                }      
            }    
        }  
    },
        
    publisher: function (evt, args) {       
        if (this.listeners.hasOwnProperty(evt)){                       
            var i, length;       
                                      
            for (i = 0, length = this.listeners[evt].length; i < length; i += 1){                
                this.listeners[evt][i](args);      
            }            
        }                            
    }
}; 

// ------------------------------------------------------------------------------------ helper
function Helper(){
    this.deleteElement = function(id){
        $('#' + id).remove();

        return;
    };  
};

// ------------------------------------------------------------------------------------ init
var helper = new Helper();


bullet = new Bullet('bullet_0'); 

bullet.init(500, 500);


observerable.addListener(bullet, "makeMoveBullet", "move"); 

setInterval(function(){
    observerable.publisher("makeMoveBullet");
}, 100);

JavaScript使用垃圾收集器刪除未使用的變量。 我會說做這樣的事情:

delete this.x; delete this.y ; ... ; delete this;

當您要刪除對象(也從其他任何外部數據結構中刪除對象)時。 刪除所有屬性,然后刪除對象本身。 然后,GC應該將其刪除。

setInterval返回一個間隔標識符。 當您不希望間隔的更多執行時,請使用clearInterval函數清除間隔。

var int = setInterval(...);
...
clearInterval(int);
removeListener: function (object, evt, callback) {
    if (this.listeners.hasOwnProperty(evt)) {
        var i, length;

        for (i = 0, length = this.listeners[evt].length; i < length; i += 1) {
            if (this.listeners[evt][i] === object[callback]) {
                this.listeners[evt].splice(i, 1);
            }
        }
    }
}

object[callback]始終是未定義的,因此this.listeners[evt].splice(i, 1); 無法執行;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM