2015-02-07 116 views
1

我正在做一些JavaScript練習,我解決了它。但在另一種解決方案,我看到這個...什麼是編碼技術叫?函數[]()

this.queue(
    buf.toString()[ 
     nlines++ % 2 === 0? 'toUpperCase' : 'toLowerCase']() + '\n'); 

凡爲我這樣做...

var line = buf.toString(); 
this.queue(lineCount % 2 === 0 
     ? line.toLowerCase() + '\n' 
     : line.toUpperCase() + '\n' 
    ); 

傳入[]的功能後,什麼技術叫什麼?

我在swift中看到過類似的東西,如果它們是最後一個參數,就傳遞閉包。我假設它是相同的,但不能在google上找到它,因爲我不知道這些詞。 甚至沒有關閉

+0

'[]'應用於函數調用的結果。 – thefourtheye 2015-02-07 20:04:47

回答

3

這是用於訪問對象屬性的bracket notation。在你的情況下,buf.toString()是一個字符串。所有字符串都有一堆來自String.prototype的屬性,如toUpperCasetoLowerCase。通常你用點符號讀取這些屬性:

buf.toString().toUpperCase(); 

但是你總是可以使用括號語法。以上相當於

buf.toString()['toUpperCase'](); 

在你的情況中,括號表示法對條件屬性名稱非常有用,因爲括號內可以有一個表達式。

可能你在[]之後被圓括號弄糊塗了。但很容易理解:String.prototype.toUpperCase屬性是一個函數,因此您擁有使用()運算符調用此函數的所有合法權利。這裏沒有魔法。

+0

謝謝,這很清楚。我不知道爲什麼我看不到。我不會調用這樣的核心方法,只是走錯了方向。 很酷,謝謝.. – csduarte 2015-02-07 20:12:22

1

您正在尋找的術語是Property Accessor。在這種情況下,您正在查看括號記號

您可以使用[]運算符來訪問JavaScript對象的各種屬性。這些屬性包括可以調用的函數。

object["functionName"]() 

人們可以想到的對象作爲一個關聯數組(也稱爲地圖,字典,散列查找表)的。此數組中的鍵是對象屬性的名稱。當談到對象的屬性以區分屬性和方法時,這是很典型的。然而,財產/方法的區別只不過是一種慣例。方法只是一個可以調用的屬性,例如,如果它具有對Function實例的引用作爲其值。