2012-04-10 51 views
0

我正在學習javascript匿名函數和範圍,並試圖理解某些內容,但已變得有點卡住了。如何在1行中的對象上調用匿名javascript函數?

我有以下三個功能:

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

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

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

我試圖寫javascript的單行(在那裏說://single line invocation),使得以下兩個調用的結果會有所不同,而不是具有同樣的效果:

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

由於funcB被引用this.test相反,它是有道理的,這將是改變地方(實例)的值,所以我們可以利用在跳到FuncC的「項目」的對象。我試着做一些匿名函數「東西」,如:

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

不過,我還沒有得到任何運氣,導致不同結果的聲明條款。 (即當我使用節點(.js)運行我的代碼時,testthis.test值都會更改)。

任何幫助更好地理解這一點會很好。

由於提前,

ParagonRG

回答

2

你必須使用call告訴它實例上下工夫。

funcB.call(item, value); 
0

您不能使用anonymus函數作爲對象屬性。你想要做

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; 
相關問題