无法获得两个函数来相互初始化

时间:2012-02-28 15:24:12

标签: javascript jquery

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的地方。但这太荒谬了......

5 个答案:

答案 0 :(得分: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));

你的意思是这样吗?

答案 1 :(得分: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();
});​

答案 2 :(得分: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);
});

答案 3 :(得分: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);

答案 4 :(得分: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);