2012-02-26 10 views
0

私はゲームを作っていて、Prototype JSフレームワークを使ってオブジェクトを使って簡単に作業しています。 私自身のオブジェクトの中でDOM以外のイベントのための独自のメソッドを作った。OOPで 'this'の問題JS

StageObjectはScreenオブジェクトの子であり、load()メソッドはオブジェクトのイメージをロードし、ロードされるとすぐにイベントを発生させます。 ここにある:objectLoadedHandlerはStageObjectに属し

var StageObject = Class.create(Screen, {...}) 

StageObject.addMethods({ 
    /*.....*/ 
    load:function(){ 
     this.img = new Image(); 
     this.img.src = "./src/img/"+this.src;   
     this.img.onload = this.objectLoadedHandler();       
    }, 
}) 

。別のイベントが発生すると、whitchハンドラがScreenオブジェクトにあり、StageObjectにはありません。問題は、この2番目のハンドラの内部に'this'が現在のオブジェクト(画面)を指していないことです。私はそれが何を指しているのか分かっていませんが、私はさらなる計算に必要なスクリーンオブジェクトのプロバティには到達できません。それについてアドバイスをお願いします。

答えて

1
this.img.onload = this.objectLoadedHandler.bind(this);  
+0

ありがとうございます!私はPrototypeを学ぶのにもっと時間を費やすべきだった。私はこれを見つけたhttp://www.prototypejs.org/api/function/bindそしてそれは私にすべてを説明した。 – soin08

-2

私は問題があなたのコードにあまりにも多くのオブジェクト指向のものを埋めることだと思います。コードの2行おきにthisを使用すると、それ以上の影響を把握できない状況に常に遭遇します。プロトタイプを知らないこと、またはあなたのポストのコードピースに理解のために重要な部分がないことに気づかなければならないかどうかはわかりませんが、どちらが間違っているか分かりません。

いずれにしても、単にこの問題を解決しても、あなた自身が理解しにくいコードを書くという、より一般的な問題は解決しません。また、参照してください:https://stackoverflow.com/questions/1103299/help-me-understand-this-brian-kernighan-quote

JavaScriptでは、thisはやや危険なツールですが、かなりシンプルなものに使用する人もいればうまくいくこともあります。しかし、他の関数などのパラメータとして関数を渡すと、どのようなコンテキストでもthisが意味することを理解することが難しくなります。個人的には私のコードではほとんどthisを使うことはほとんどありませんし、オブジェクトに関数をつけることはほとんどありません。重いオブジェクト指向スタイルが有用ないくつかの複雑な問題がありますが、ほとんどの場合、それは良いよりも害を及ぼすと言います。

+2

あなたがフォームのようなものを作ったり、OOPを全く使う必要がないか、時にはそれを使用する必要がないようなものを作ったとしたら、私の場合はOOスタイルを使いたいと思った私のオブジェクト間の接続を最小限に抑えて、論理部分を互いに拡張せずに個別に変更することができます。プロトタイプ 'bind()'を使用する方法のスコープが正確にわかっているので、メソッドは固定されています。それでもアドバイスをいただきありがとうございます。 – soin08

+0

"オブジェクト間の接続を最小限に抑え、論理部分を互いに拡張せずに個別に変更できるようにします。それは空想的だと思いますが、覚えておいて、それは非機能であり、実際には何もしません。おそらくあなたのコードを書いて維持しやすくするべきです。実際にそれを達成するかどうかは疑問です。非常にプログラマが教えている「ベストプラクティス」に疑問を呈する人はごくわずかです。 – aaaaaaaaaaaa

+0

"おそらく、あなたのコードを書いて保守しやすくするべきです" - そうです!必要に応じて例を提供することができます。 – soin08