こんにちはみんなこれは可能ですか?requirejsモジュール内の関数内で関数を呼び出しますか?TIA
define([
'common'
], function(Common) {
return {
func1: function() {
return 'this is function 1';
},
func2 : function (data){
console.log(func1);
}
};
});
こんにちはみんなこれは可能ですか?requirejsモジュール内の関数内で関数を呼び出しますか?TIA
define([
'common'
], function(Common) {
return {
func1: function() {
return 'this is function 1';
},
func2 : function (data){
console.log(func1);
}
};
});
記載されているコードは機能しません。次のように変更することをお勧めします。
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;
});
個人的には、このスタイルのコードはクリーンで柔軟だと思います。どの関数がエクスポートされているかは明らかであり、単純なローカル変数名を使用して相互に参照できます。
何が起こるかを理解するために、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
は外部からアクセスできません
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 の内外からアクセスできます。私にとっては非常にうまく機能します。ありがとう。
以下はうまくいくでしょう...
console.log(this.func1());
ハンドルを正しく指定していませんthis
。func1 ハンドルを指定するために使用する必要があります。関数定義を出力するため、括弧なしで実行する
だけでなくfunc1()
、printを呼び出そうとしていたと思います。'this is function 1'
func1