2012-02-18 10 views
1

ない私は言葉この権利をできることを確認し、ので、ここでいくつかのコードです:JSON/javascriptメンバー関数がdojoモジュールの親を参照していますか?

注:作成するときに、これは道場モジュール

define([], function() { 
var j = { 
    a : function() { 
     //a object 
    }, 
    b : function() { 
     //b object 
     this.x = new j.a();// this works 
     this.y = new this.a(); // this causes error later, see jsfiddle link below 
    }, 
    c : function() { 
     //c object 
    } 
} 
return j; 
}); 

あるa.jsと呼ばれるファイルで、私は単にオブジェクトbが欲しいれるが、 new(bの親).a();新しいものとしてそれを行うための新しい 'a'オブジェクト。新しいj.a()よりむしろ。ここで、変数jはbの親である。その説明が助けられているかどうかはわかりませんが、基本的には、bから新しい 'a'オブジェクトを作成する相対的な方法が必要です。

エラーは、このコードで再現されていますhttp://jsfiddle.net/WhhV5/3/

ないここだ、コードが実行されないかもしれないが、これらは私のホームXAMPP率直に言って

+0

あなたはオブジェクトの定義を制御できますか?また、例を提供する代わりに、実際の**問題を表示することができますか? –

+0

私はこれをb:this.x = new this.a();で実行しようとするとUncaught TypeErrorを取得します:undefinedはchromeの関数ではありません。これがdojoモジュールで宣言されていても問題ありませんか? – Derek

+0

あなたの本当の問題を示して何を意味するのか分かりません。私のモジュールは1000行以上のコードですが、これが問題のある唯一の行です。 – Derek

答えて

0

に使用される二つのファイルですのでjsfiddleに道場のものを実行する方法がわから

In other words, I want to call j.a(), j.c() in j.b() such that if I change the var j's name to var m, I won't have to change the function calls to m.a(), m.c().

JavaScriptで変数の名前を変更することはできません。変数は、Object自体(すなわち、データ構造に割り当てられたメモリの範囲)ではなく、の参照Objectsです。

jが参照する値を別の変数mで参照すると、jはまだメモリに存在します。あなたは単に別のの参照Objectに作成しました。jも参照してください。あなたはその名前を変えなかった。

m#bを呼び出すと、jがまだ存在するため、問題なくj#aj#cが呼び出されます。

var j = { 
    a: function() { console.log("(!!) a") ; } , 
    b: function() { new this.a() ; } , 
    c: function() { console.log("(!!) b") ; } , 
} ; 

var m = j ; 
    m.b() ; 
+0

私の説明が本当に悪かったら、私は私の少し質問しますが、私はそれがはっきりしているかどうかはわかりません。しかし、私が本当に望むのは、簡単なショートカットの修正ではなく、aからbを作成/呼び出す概念的な相対的な方法です。 – Derek

+0

ここで抽象的なアプローチが必要だと思います。私があなたが気づいていないことは、問題が存在しないということです。ここでは、上記のコードを[JSBin](http://jsbin.com/ovohok/edit#javascript,html)で試してみてください。それは問題なく動作します。 – FK82

+0

dojoで動作しません – Derek

関連する問題