2012-04-10 16 views
0

私はJavaScriptの匿名関数とスコープについて学習していますが、何かを理解しようとしていますが、ちょっと立ち往生してしまいました。 オブジェクトの1行で匿名のjavascript関数を呼び出す方法は?

I次の三つの機能があります。

var funcA = function (value) { 
    test = value; 
}; 

var funcB = function (value) { 
    this.test = value; 
}; 

var funcC = function (func,value) { 
    var item = {}; 
    //single line invocation 
} 

は、私がこのような二次の呼び出しの結果が異なること、代わりに有していると(それが//single line invocation言う)のjavascriptの単一の行を記述しようとしています同じ効果:funcBのではなくthis.testを参照しているので

funcC(funcA, "set"); 
funcC(funcB, "set"); 

、それはローカル(インスタンス)の値を変更しますので、我々はfuncCの「アイテム」オブジェクトを利用できるという意味があります。私は異なる結果が得られステートメントの面でいずれかの運を持っていなかったしかし

item.(function(func,value){func(value)})(func, value); 

:私はのようないくつかの無名関数「もの」をやってみました。 (ノード(.js)を使用してコードを実行すると、testthis.testの両方の値が変更されます)。

これをよりよく理解するための助けがあれば、素晴らしいことでしょう。事前に

おかげで、

ParagonRG

答えて

2

あなたは上で動作するために、インスタンスを伝えるためにcallを使用する必要があります。

funcB.call(item, value); 
0

アノニマス機能をオブジェクトプロパティとして使用することはできません。あなたはしたい

var item = {"f": func}; 
item.f(value); 
// item.test == value now 

右か? JavaScriptがこれを行う方法が.call() functionです:

func.call(item, value); 
// with the difference that item has no "f" property here 

あなたはまた、匿名関数式でcallを使用することができます。

(function(val){ this.test = val; }).call(item, value); 
// yet this equivalent looks much cleaner: 
item.test = value; 
関連する問題