Javascript EaselJS removeChild是否也会删除附加的EventListener?
EaselJS的Javascript EaselJS removeChild是否也会删除附加的EventListener?,javascript,event-handling,garbage-collection,dom-events,easeljs,Javascript,Event Handling,Garbage Collection,Dom Events,Easeljs,EaselJS的removeChild方法(的一部分)是否也处理附加到该子级的EventListener的清理?或者必须在删除子级之前使用removeEventListener手动删除子级的事件侦听器 例如: stage = new createjs.Stage(canvas); circle = new createjs.Shape(); circle.graphics.beginFill("#333").drawCircle(0,0,5); circle.addEventListener(
removeChild
方法(的一部分)是否也处理附加到该子级的EventListener的清理?或者必须在删除子级之前使用removeEventListener
手动删除子级的事件侦听器
例如:
stage = new createjs.Stage(canvas);
circle = new createjs.Shape();
circle.graphics.beginFill("#333").drawCircle(0,0,5);
circle.addEventListener("mousedown",function(event){
console.log("mouse down");
});
stage.addChild(circle);
.
.
.
stage.removeChild(circle);
事件监听器不会在
removeChild()
时删除,因为它们也不会添加到addChild()
-如果您确实想快速删除它们,最快的方法是myChild.removeAllEventListeners()代码>
但是,如果某个DisplayObject没有以某种方式连接到后台,则事件不会通过鼠标交互进行调度,因为这些事件只会在后台及其子级中冒泡
如果您担心内存泄漏:EaselJS中的事件直接位于DisplayObject本身,因此每当您删除对该对象的引用时,事件也(应该)由垃圾收集器收集,无需单独删除事件。(请,有人在这里纠正我,以防我错了)事件侦听器不会在removeChild()
上删除,因为它们也不会添加到addChild()
-如果您确实想快速删除它们,最快的方法是myChild.removeAllEventListeners()代码>
但是,如果某个DisplayObject没有以某种方式连接到后台,则事件不会通过鼠标交互进行调度,因为这些事件只会在后台及其子级中冒泡
如果您担心内存泄漏:EaselJS中的事件直接位于DisplayObject本身,因此每当您删除对该对象的引用时,事件也(应该)由垃圾收集器收集,无需单独删除事件。(请,有人在这里纠正我,以防我错了)因此,本质上,如果使用removeChild()
对孩子的唯一引用来自家长,那么实际上应该通过垃圾收集的方式删除事件侦听器?是的,我95%肯定这一点,并且从来没有任何问题,但是如果您想超级保存,只需添加一个removeAllEventListeners()
-不会有多大伤害;-)因此,从本质上说,如果对子级的唯一引用来自父级,那么使用removeChild()
,实际上应该通过垃圾收集的方式删除事件侦听器吗?是的,我95%确定这一点,并且从来没有任何问题,但是如果您想超级保存,只需添加removeAllEventListeners()
-不会有多大影响;-)