2012-02-28 44 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); 
}); 

我知道如何解決C++中的這個問題,但不知道有什麼技巧要在JavaScript中修復它。有一種方法,對吧?我絕對必須在另一個函數中擁有每一個函數,而我能想到的唯一另一種方法是將funcB的內容放入它自己的.js文件中,然後使用PHP創建兩個版本的funcB,一個用於funcA,一個用於當前funcB的地方。但是這很荒唐......不能獲得兩個函數來初始化對方

+1

你想用這個做什麼?我絕對相信有更好的方法。 – 2012-02-28 15:25:22

+0

不是這是一個無限循環? – 2012-02-28 15:26:48

+0

它們都包裝一個jQuery接口。 funcB是一種具有多種選項的搜索功能,其中之一是funcA。然而,funcA也需要能夠使用稍微有限的funcB來搜索數據來獲取自己的功能。 funcA將初始化的funcB不會允許無限循環,順便說一下,它的一個小小的限制就是它不會使用funcA,但是它有很多其他的東西。我真的很希望它與我在OP中概述的相似,而不是真正尋找能夠改變一切的解決方案。 – user173342 2012-02-28 15:26:58

回答

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 2012-02-28 15:40:34

+0

哪裏有休息? http://jsfiddle.net/EGjxx/ – xdazz 2012-02-28 15:54:31

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);