Javascript RequireJS:定义模块-TypeError:无法获取未定义或空引用的属性
我有两个JavaScript文件Javascript RequireJS:定义模块-TypeError:无法获取未定义或空引用的属性,javascript,requirejs,Javascript,Requirejs,我有两个JavaScript文件file1.js和file2.js,我想用它们创建模块,以便与RequireJS一起使用 file1.js define('file1', ['file2'], function(myVar) { console.log(myVar); myVar.doSomething = function() { return { 'test': 13 } } }); define('file
file1.js
和file2.js
,我想用它们创建模块,以便与RequireJS一起使用
file1.js
define('file1', ['file2'], function(myVar) {
console.log(myVar);
myVar.doSomething = function() {
return {
'test': 13
}
}
});
define('file2', ['someOtherDep'], function(someVarFromSomeOtherDep) {
var myVar = (function() {
var test = someVarFromSomeOtherDep.test.a;
var doIt = function(var1) {
// …
return x;
};
return {
doIt: doIt
}
}());
console.log(myVar);
return myVar;
});
如您所见,存在对file2.js的依赖关系,我需要获取myVar
。在这里,您可以看到file2
和我在这个文件中所做的代码片段
file2.js
define('file1', ['file2'], function(myVar) {
console.log(myVar);
myVar.doSomething = function() {
return {
'test': 13
}
}
});
define('file2', ['someOtherDep'], function(someVarFromSomeOtherDep) {
var myVar = (function() {
var test = someVarFromSomeOtherDep.test.a;
var doIt = function(var1) {
// …
return x;
};
return {
doIt: doIt
}
}());
console.log(myVar);
return myVar;
});
如果我使用file1
作为依赖项并调用myVar.doSomething()
,我会得到TypeError:无法获得未定义或空引用的属性“doSomething”
,并且console.log
显示[对象对象]{}
以下是依赖于file1
的文件:
define(['file1'], function(myVar) {
var test = myVar.doSomething();
});
那么,这里怎么了?似乎myVar
没有从file2
正确返回
两个console.log都显示[object object]{}
真奇怪。你试过扩大视野吗?您应该能够看到您的方法
我获取TypeError:无法获取未定义或空引用的属性“doSomething”
那么,这里怎么了?似乎myVar没有从file2正确返回
否。myVar
没有从文件1正确返回-事实上,那里根本没有返回任何内容
define('file1', ['file2'], function(myVar) {
console.log(myVar);
myVar.doSomething = function() {
return {
'test': 13
}
}
return myVar;
// ^^^^^^^^^^^^^
});
您将从行var test=myVar.doSomething()中获取错误代码>(取决于文件1),而不是来自文件1(取决于文件2)。在file2.js
中,您缺少一个结束)代码>在最后一行如果语法不是问题,您能验证文件1和文件2之间是否存在循环依赖关系吗?@Bergi:是的,您是对的,但这只是复制/粘贴的结果,在我的源代码中是正确的。@sma:不,没有循环依赖关系。顺便说一句,如果没有理由这样做,请避免显式地给模块命名。让RequireJS根据您的文件路径处理模块命名。您是对的,展开视图我可以看到函数doSomething
。是的,我没有在这里归还。这是这里唯一的问题!非常感谢。