Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all articles
Browse latest Browse all 14821

怎样可以有效的解决因为循环引用导致空对象的问题?

$
0
0

今天代码遇到方法未定义has no method问题。发现是循环引用的问题。

nodejs在遇到循环require时,会把require结果得到的结果变成空对象{}。这个结果包括的是循环引用链中的每一个。

例子:

a.js console.log(‘a.js’); var b = require(’./b’); console.log(‘a+.js’); console.log(b); exports={name:‘a’}; console.log(‘a++.js’);

b.js

console.log(‘b.js’); var c = require(’./c’); console.log(‘b+.js’); console.log©; exports={name:‘b’}; console.log(‘b++.js’);

c.js

console.log(‘c.js’); var a = require(’./a’); console.log(‘c+.js’); console.log(a); exports={name:‘c’}; console.log(‘c++.js’);

然后我执行

node a.js

打印如下:

a.js b.js c.js c+.js {} c++.js b+.js {} b++.js a+.js {} a++.js

可以看到node会按引用链引用,直到发现循环引用了为止。

然后开始回溯,所有的代码都会执行到。

唯一不同的是所有循环链中require的结果都是空对象{}.

在代码编写过程中怎样可以避免这个问题的出现呢?


Viewing all articles
Browse latest Browse all 14821

Trending Articles