enchant.js で clearEventListener すると Collection から削除される
clearEventListener
enchant.Entity
enchant.js
// enchant.Entity = ...
{
clearEventListener: function() {
_nodePrototypeClearEventListener.apply(this, arguments);
if (this.scene) {
this._removeSelfFromCollection(); // 問題のコード
}
},
// ...
_removeSelfFromCollection: function() {
if (!this._isContainedInCollection) {
return;
}
var Constructor = this.getConstructor();
Constructor._collectionTarget.forEach(function(C) {
var i = C.collection.indexOf(this);
if (i !== -1) {
C.collection.splice(i, 1);
}
}, this);
this._isContainedInCollection = false;
},
}
本来の挙動は「イベントリスナーから特定のタイプのイベントハンドラを全て除去する」であるはず
最初の行だけでそれは達成しているはずだが、
enchant.Entity
はなぜかそれをオーバーライドして、コレクションからオブジェクトを削除している