私はcurrenlty JavaScript
で、次の基本的なIIFE
を持っている:上記IIFEにサービスを渡すには?
var myService = new Service(); //code omitted but its a service class that gets data
var myTest = Test(myService);
動作しません:以下れる私は何をできるようにしたいと思い
var Test = (function(service){
var me = this;
me.service = service;
var my = {};
my.getData1 = function(){
return me.service.GetData1();
}
my.getData2 = function(){
return me.service.GetData2();
}
return my;
}());
。ラインvar myTest = Test(myService);
でエラーが発生します:
}(service));
Test is not a function
は、私はまたIIFE
では、1に値を渡す必要があることを知っています
I を保持するグローバル変数であるTest
を削除し、その代わりにfol署名をlowing:
function Test(service) {}
しかし、私は試してみて、グローバルスコープを汚染防止にIIFE
を使用しています。私が設計し、Service
のインスタンスを後でTest
に渡すことができますか?または、それが呼び出されたときにその入力がすべて解決された場合にのみ、IIFE
にすることはできますか(または、service
を必要とするIIFE
のすべてのメソッドにパラメータを設定する必要がありますか?
私は各メソッドにサービスを渡す必要がないようにしようとしていました。可能であれば、私はサービスのインスタンスを渡したいと思いますが、おそらく私の理解は外されています。
サービスを受け入れる通常のコンストラクタではなく、なぜIIFEですか? "私はIIFEを使って地球規模の汚染を防ぎしようとしています"違いはありません... "テスト"はまだグローバルになります。 – plalx
@plalx - 私は実際にあなたの提案に興味があります。私が実行した問題は、 'function test(service){this.myService = service'}をコンストラクタとして使用し、後で' var result = this.carservice.GetData1(); 'のように使用しようとしています。 'my.getData1'のようなメソッドの中で、' Undefined'の 'GetData1 'プロパティを読み込めません。私はそれが、「これ」が作成されたオブジェクトに拘束されていて、私が持っていた方法では動作しないためだと思います。私は 'var me = this'のような別の変数に' this 'を代入する回避策があります。どう思いますか? – atconway
@plalx - 気にしないでください。ちょうどサービスを渡し、コールで直接使用してください。下記のように転送する必要はありません。コンストラクタに渡した後、メソッド内で直接使用するだけで動作します。 – atconway