1

嗨,伙计们,这可能吗?在 requirejs 模块内的函数内调用函数?TIA

define([
'common'
], function(Common) {

return {
    func1: function() {
        return 'this is function 1';
    },

    func2 : function (data){
        console.log(func1);

    }
};
 });
4

4 回答 4

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;
});

我个人认为这种代码风格是干净和灵活的。导出哪些函数很清楚,它们可以使用简单的局部变量名称相互引用。

于 2013-03-08T05:52:17.273 回答
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从外部无法访问

于 2013-03-09T16:29:02.683 回答
0

受到 Andreas Köberle 回答的启发,我发现了这个工作,但我几乎可以肯定有更好的方法来做到这一点......

define(function(require) {

  function func1() {
    return 'this is function 1';
  }
  return {
    func1: function() {
      return func1();
    },
    func2 : function (data){
        console.log(func1);
    }
  };
});

这样我们就可以从方法 func1 的内部和外部访问。对我来说效果很好。谢谢。

于 2013-06-21T23:19:00.800 回答
-2

以下将起作用...

console.log(this.func1());

您没有正确指定句柄,您必须使用this指定 func1 句柄。而且我认为您将要调用func1()print'this is function 1' 不仅仅是func1没有括号,因为它会打印函数定义。

于 2014-12-23T10:07:09.443 回答