2012-02-28 11 views
-1
function funcA() { 
var fB; 

function init() { 
    fB = new funcB(false); //error here 
} 

init(); 
} 

function funcB(usefuncA) { 
var fA; 

function init() { 
    if (usefuncA) fA = new funcA(); 
} 

init(); 
} 

$(function() { 
var test = new funcB(true); 
}); 

を初期化するために二つの機能を取得しないが、JavaScriptでそれを修正することがありますどのようなトリックは考えません。しかし、方法はありますか?私は絶対に他のそれぞれの関数を持っている必要があります、私は考えることができる唯一の他の代替案は、funcBの内容を独自の.jsファイルに入れ、PHPを使ってfuncBの2つのバージョンを作成します。 funcBの場所。しかしそれはばかげている...は、私はC++でこの問題を回避する方法を知ってお互い

+1

これで何を達成しようとしていますか?私は確かに良い方法があると確信しています。 –

+0

これは無限ループではありませんか? –

+0

両方ともjQueryインターフェイスをラップします。 funcBは複数のオプションを持つ検索関数の一種で、そのうちの1つはfuncAです。しかし、funcAはまた、わずかに制限されたfuncBを使用して、独自の機能を取得するためにデータを検索する必要があります。 funcAが初期化するfuncBは無限ループを許さないでしょう、btw、わずかな制限はfuncAを使用しないことですが、どちらの場合でも多くの他のものを使用します。私は実際に、私がOPで概説したものと似ていますが、すべてを変える解決策を模索しているわけではありません。 – user173342

答えて

0

このコードは(あなたの元のコード、マイナスjqueryのに不要な呼び出し)私のために正常に動作します。エラーはありません。

here(コンソールを見てください)を実行できます。

function funcA() { 
var fB; 

function init() { 
    fB = new funcB(false); //error here 
} 

init(); 
} 

function funcB(usefuncA) { 
var fA; 

function init() { 
    if (usefuncA) fA = new funcA(); 
} 

init(); 
} 

var test; 

test = new funcA(); 

console.log(test); 

test = new funcB(); 

console.log(test); 

test = new funcB(true); 

console.log(test); 

0
(function (testFuncA, $, undefined) { 
     testFuncA.init = function(caller) { // do stuff }, 
    } (window.testFuncA= window.testFuncA|| {}, jQuery)); 

    (function (testFuncB, $, undefined) { 
     testFuncB.init = function() { testFuncA.init(this); }, 
    } (window.testFuncB= window.testFuncB|| {}, jQuery)); 

このようなことを意味しますか?

0

無限ループを避ける必要があります。

function funcA(B) { 
var fB; 
var that = this; 
function init() { 
    fB = B || new funcB(that); 
} 
init(); 
} 

function funcB(A) { 
var fA; 
var that = this; 
function init() { 
    fA = A || new funcA(that); 
} 
init(); 
} 

$(function() { 
var test = new funcB(); 
});​ 
+0

無限ループを回避しても問題は解決されませんが、それでも問題は解決しません。 – user173342

+0

どこが壊れていますか? http://jsfiddle.net/EGjxx/ – xdazz

0
function funcA() { 
    var fB; 

    this.init = function() { 
     fB = new funcB(false); //error here 
    } 
} 

function funcB(usefuncA) { 
    var fA; 

    this.init = function init(usefuncA) { 
     if (usefuncA) fA = new funcA(); 
    } 
} 

$(function() { 
    var test = new funcB(); 
    test.init(true); 
}); 
0

それはあなたが探しているものを多分これですか?

FuncA = function() { 
     var fB; this.init(); }; 
FuncA.prototype.init = function() { 
     this.fB = new FuncB(false); }; 
FuncB = function (usefuncA) { 
     var fA; this.init(usefuncA); }; 
FuncB.prototype.init = function (usefuncA) { 
     var fA; if (usefuncA) { this.fA = new FuncA(); } }; 

var test = new FuncB(true); 
関連する問題