简体   繁体   English

如何彻底清除

[英]how to completely remove

please help to remove the new Bullet. 请帮助删除新的项目符号。 jsfiddle jsfiddle

after the object it moves across the screen from the bottom up. 在对象之后,它从下向上在屏幕上移动。 coordinate with y <= 5px method works helper.deleteElement (), but the object is still there exists (see the console - console.log ('move') ;) 使用y <= 5px进行协调,方法可以使用helper.deleteElement(),但是该对象仍然存在(请参阅console-console.log('move');)

I need to to be removed completely 我需要彻底移除

js: 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 uses a Garbage Collector to remove unused variables. JavaScript使用垃圾收集器删除未使用的变量。 I would say to do something like this: 我会说做这样的事情:

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

When you want to remove the object (also remove it from any other external data structures). 当您要删除对象(也从其他任何外部数据结构中删除对象)时。 Remove all it's properties then the object itself. 删除所有属性,然后删除对象本身。 Then the GC should remove it. 然后,GC应该将其删除。

setInterval returns an interval identifier. setInterval返回一个间隔标识符。 Clear the interval using clearInterval function when you don't want more executions of the interval. 当您不希望间隔的更多执行时,请使用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] is always undefined so this.listeners[evt].splice(i, 1); object[callback]始终是未定义的,因此this.listeners[evt].splice(i, 1); cannot be executed; 无法执行;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM