2012-01-10 10 views
0

オブジェクトのプロパティにアクセスできません。mootoolsクラスはオブジェクトにアクセスできませんが、コンソールで見ることができます

console.log(object) 

は、このやショーがあることを私に与えます「表示」プロパティが enter image description here

を定義した。しかし、これは

console.log(object.display) 

がどのように表示オブジェクトにアクセスすることができますundefinedを返しているのですか?

多くの感謝!

var classOne = new Class({ 

    myOtherFunction : function() { 
     this.display = new classTwo(); 
    } 
}); 

var classTwo = new Class({ 

    myFunction : function() { 
     //does something 
     this.fireEvent('customEvent'); 
    } 

}); 

var classThree = new Class({ 
    initialize: function() { 
     // THIS IS WHERE MY PROBLEM IS 
     class_one.display.addEvent('customEvent', function() { 
      this.doSomething(); 
     }.bind(this)); 
    } 
}); 

class_one = new classOne(); 
class_three = new classThree(); 

これは正確なコードではありませんが、私は余分なものをたくさん削除しました。ありがとう!

+0

もっとコードを見る必要があります。どのようにクラスを作成していますか?どのように初期化していますか? – pleasedontbelong

+0

これは理論上はうまくいくはずです。 JsFiddleに例を挙げてください。 –

+0

コード – styks

答えて

0

その取り除いたバージョンが本当に代表的なものである場合:

  1. class_oneが以前に宣言されずにclassThree内で参照されます。
  2. displayは、class_one.myOtherFunctionが呼び出されたときにのみ初期化されます。

...しかし、あなたが実際に代表的な部品を取ったことを確認するためにJsFiddleにもっとコードを与えるべきです。

私は、この権利を得るためにJavascript variables instanciation and referencingについて詳しく知っていることをお勧めします。そうでなければ、このような問題に遭遇し続けるでしょう。

PS:CamelCasingまたはusing_underscores_for_variablesのいずれかを選択する必要があります。ラクダキャッシング(推奨)の場合、クラスはUpperCasedCamelCase、変数lowerCaseCamelCaseにする必要があります。

+1

また、これは本当に奇妙なパターンです。彼はクラスを拡張したり実装したりする必要があります。 –

+0

あなたはまさに正しいです。プロパティは遅すぎる設定されていた。 @Dimitarクラスの拡張や実装はどういう意味ですか? classOneとclassTwoは別のプログラマーのスクリプトの一部です。私はそれを変更したくありません。 – styks

+1

- あなたはそうする必要はありませんが、 'Implements'ミューテータを介してミックスインとして別のクラスのプロトタイプからコピーすることもできますし、' Extends'ミューテータで別のクラスを拡張することもできます。たとえば、Request.JSONPのようにほとんど** **動作するクラスを実行したいが、特定のDSL、例えばTwitterの場合、私は 'Request.Twitter = new Class({Extends:Request.JSON ..}として宣言します。 。}); 'そして必要な違いと詳細を抽象化するだけです。それは本当に意思決定/計画の一種です。 –

関連する問題