onEnterFrameのメソッドをdeleteする時に
delete this.onEnterFrame;
と記述していたんだけどクラス定義のMCには
この記述が効かない?のかな?
おれのデバックミスかもだけど(適当なんで)
クラス定義にonEnterFrameを書いているときには
thisonEnterFrame = null;
を使用したらうまくいったのでこれからはこっちの方を
使っていこうかな?
イマイチ
・this.onEnterFrame = null;
・delete this.onEnterFrame;
の違いが分からないや。
また調べようっと、一応メモ。
疑問点:
test.onEnterFrame=function() {
delete this.onEnterFrame;
//this.onEnterFrame = null;
trace("hoge");
}
もちろん上記の記述では
delete this.onEnterFrameもthis.onEnterFrame=nullも
どちらもtraceが実行されません。
今まではこのようにしてイベントハンドラを削除していました。
で、最近やっとCLASS定義の勉強をしようと思って
CLASS内でイベントハンドラの定義をしていて疑問になったのが
#initclip
function TestClass() {}
var obj = TestClass.prototype = new MovieClip();
obj.onEnterFrame=function() {
// delete this.onEnterFrame;
this.onEnterFrame = null;
trace("hoge");
}
Object.registerClass("test",TestClass);
#endinitclip
上記のような場合は
delete this.onEnterFrame;
を記述していても"hoge"がtraceされ続けるのですが
this.onEnterFrame=nullを記述すればtraceが実行されなくなります。
で、CLASSにイベントハンドラを記述する時にイベントを削除する時には
deleteではなくnullかもしくはundefindを使うのかなと・・・。
う〜ん、なぜでしょう?そもそもCLASSの定義の仕方がまずい?
はじめまして。
classでどうかは解りませんが、「イベントハンドラメソッドはdelete演算子で削除した方が安全」だそうです。
F-site: イベントハンドラメソッドはdeleteで消せ!
http://f-site.org/archives/000359.html
pixelmainさん、はじめまして。
なるほど、教えて頂いたF-SITEのページを見れば
やっぱりdeleteの方が良いのですかね。
なんかCLASS定義のイベントハンドラに対しては
うまく動作しなかったような・・・。
けど違いの意味が分かったのはかなり有用でした。
ありがとうございます。

onEnterFrameについて。