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