},\r
unlisten : function( type, arg1, arg2, arg3 ){\r
var list = this._listeners,\r
- unlistens, i, f;\r
+ _list, reservess, unlistens, i, f;\r
if( !list ) return this;\r
if( type === undefined ){\r
// 全て削除\r
for( type in list ){\r
- this.unlisten( type ); // override されていることがあるので、必ず unlisten を使用\r
+ _list = list[ type ];\r
+ if( !( i = _list.length ) ) continue;\r
+ for( ; i; ){\r
+ this.unlisten( type, _list[ --i ] ); // override されていることがあるので、必ず unlisten を使用\r
+ };\r
+ // this.unlisten( type ); これは無茶!\r
};\r
return this;\r
};\r
if( arg1 === undefined ){\r
// 同一タイプを全て削除\r
- if( !( list = list[ type ] ) ) return this;\r
- for( i = list.length; i; ){\r
- this.unisten( type, list[ --i ] ); // override されていることがあるので、必ず unlisten を使用\r
+ if( !( list = list[ type ] ) || !( i = list.length ) ) return this;\r
+ for( ; i; ){\r
+ this.unlisten( type, list[ --i ] ); // override されていることがあるので、必ず unlisten を使用\r
};\r
return this;\r
};\r
\r
- if( this._reserves ){\r
- for( i = this._reserves.length; i; ){\r
- f = this._reserves[ --i ];\r
+ if( reserves = this._reserves ){\r
+ for( i = reserves.length; i; ){\r
+ f = reserves[ --i ];\r
if( f[ 0 ] === type && f[ 1 ] === arg1 && f[ 2 ] === arg2 && f[ 3 ] === arg3 ){\r
- this._reserves.splice( i, 1 );\r
- if( !this._reserves.legth ) delete this._reserves;\r
+ reserves.splice( i, 1 );\r
+ if( !reserves.legth ) delete this._reserves;\r
return this;\r
};\r
};\r