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 に答える