2009-01-26 117 views

回答

8

其他人已經解釋了這段代碼的作用。它創建一個包含單個函數(稱爲Get)的對象(稱爲this.String)。我想解釋一下你什麼時候可以使用這個功能。

在需要更高階函數(即需要另一個函數作爲參數的函數)的情況下,此函數可能非常有用。

假設你有一個功能可以對Array的每個元素執行某些操作,我們稱之爲map。您可以使用此功能,像這樣:

function inc (x) 
{ 
    return x + 1; 
} 
var arr = [1, 2, 3]; 
var newArr = arr.map(inc); 

什麼map功能將要做的,就是創建一個包含價值[2, 3, 4]一個新的陣列。它將通過調用數組中的每個元素的函數inc來完成此操作。現在

,如果你使用這種方法有很多,你可以連續通話map與各種參數:

arr.map(inc); // to increase each element 
arr.map(even); // to create a list of booleans (even or odd) 
arr.map(toString); // to create a list of strings 

如果由於某種原因,你會想用相同的字符串替換整個陣列(但保持相同大小的數組),你可以把它像這樣:

arr.map(this.String.Get("my String")); 

這將創建一個同樣大小的新數組爲arr,但只包含字符串"my String"一遍又一遍。

請注意,在某些語言中,此函數是預定義的並且被稱爲constconstant(因爲無論它的參數是什麼,它每次調用它時都會返回相同的值)。


現在,如果你認爲這個例子不是很有用,我會同意你的看法。但有些情況下,使用高階函數進行編程時,使用此技術。

例如,如果您想要「清除」其值但保留樹的結構的樹,它可能很有用。你可以做tree.map(this.String.Get("default value"))並得到一個完整的新樹,其形狀與原始的完全相同,但沒有任何值。

10

this.String = {}指定一個對象。 Get是該對象的屬性。在javascript中,對象屬性及其值由冒號':'分隔。

所以,每個例子中,你會調用該函數像這樣

this.String.Get('some string'); 

更多的例子:

var foo = { 
    bar : 'foobar', 
    other : { 
    a : 'wowza' 
    } 
} 
alert(foo.bar); //alerts 'foobar' 
alert(foo.other.a) //alerts 'wowza' 
+0

但是作者給出的例子的重點是什麼?我覺得這個問題很有趣,因爲它很奇怪:p – TimothyP 2009-01-26 21:54:40

+0

@TimothyP,這不是海報的問題,雖然 – cletus 2009-01-26 22:01:49

+0

當我不能回答這個問題的答案時,我無法相信這個答案上的upvotes數量一些非常基本的對象構造代碼。 – AnthonyWJones 2009-01-27 09:28:43

4

它指定具有屬性的對象「獲取」,以this.String。 「Get」分配了一個匿名函數,它將返回一個函數,該函數僅返回給予第一個返回函數的參數。聽起來很奇怪,但這裏是它如何被使用:

var ten = this.String["Get"](10)(); 

ten然後將含有10取而代之的是,你可以寫相當於

var ten = this.String.Get(10)(); 

// saving the returned function can have more use: 
var generatingFunction = this.String.Get("something"); 
alert(generatingFunction()); // displays "something" 

也就是說,:只是分配一定的參考價值屬性。

1

這個答案可能有點superflous因爲湯姆是一個很好的答案,但只是熬下來,並完成: -

this.String = {}; 

將對象添加到與String屬性名的當前對象。

var fn = function(val) { 
    return function() { return(val); } 
} 

從閉包中返回一個函數,閉包返回創建閉包時使用的參數。因此: -

var fnInner = fn("Hello World!"); 
alert(fnInner()); // Displays Hello World! 

在組合則: -

this.String = { Get: function(val) { 
    return function() { return(val); } 
} 

將對象添加到與String屬性名當前對象具有稱爲Get方法,其從封閉件返回的功能,其在turn返回用於創建閉包的參數。

var fnInner = this.String.Get("Yasso!"); 
alert(fnInner()); //displays Yasso!