嗨,大家好吗?在requirejs模块内的函数内调用函数? TIA
define([
'common'
], function(Common) {
return {
func1: function() {
return 'this is function 1';
},
func2 : function (data){
console.log(func1);
}
};
});
答案 0 :(得分:4)
您说明的代码不起作用。我建议将其更改为:
define([
'common'
], function(Common) {
var exports = {};
var func1 = exports.func1 = function() {
return 'this is function 1';
};
var func2 = exports.func2 = function (data){
console.log(func1);
};
// A function that is not exported but can be accessed from other code in this module.
var privateFunc = function() {
};
return exports;
});
我个人认为这种代码风格干净而且灵活。很清楚哪些函数正在导出,并且它们可以使用简单的局部变量名称相互引用。
答案 1 :(得分:0)
让我们分开一个requireJs模块,以了解会发生什么:
让requireJs知道这是一个模块
define(
一些依赖
[ 'common'],
所以这是主要部分。毕竟这只是一个在加载时被调用的函数。 RequireJs保存函数的结果并将其注入每个具有此模块作为依赖项的模块
function(Common) {
return
所以这是每个模块在需要这个模块时得到的
{
func1: function() {
return 'this is function 1';
},
func2 : function (data){
console.log(func1);
}
};
因此,在您的情况下,您只返回一个带有2个函数的简单对象作为成员。
你尝试做什么不能工作,因为范围中没有func
,也就是返回对象的函数。
但是您的对象中有成员func
,因此您可以调用this.func1
。
你也可以在你的函数中使用这样的函数:
define([
'common'
], function(Common) {
function func1() {
return 'this is function 1';
}
return {
func2 : function (data){
console.log(func1);
}
};
});
但是,func1
无法从外部访问
答案 2 :(得分:0)
受到AndreasKöberle回答的启发,我发现这个问题很有用,但我几乎可以肯定有更好的方法可以做到这一点......
define(function(require) {
function func1() {
return 'this is function 1';
}
return {
func1: function() {
return func1();
},
func2 : function (data){
console.log(func1);
}
};
});
这样我们就可以从方法func1的内部和外部访问。对我来说效果很好。 感谢。
答案 3 :(得分:-2)
下面的内容会有效......
console.log(this.func1());
您尚未正确指定手柄,
你必须使用this
来指定func1句柄。
我想你打算打电话func1()
打印'this is function 1'
不只是做func1
没有paranthesis,因为它会打印函数定义。