2015-05-11 22 views
-3
GAME = {}; 

GAME[1] = { 
    test: 1, 
    test2: 2 
} 
GAMELENGTH = (Math.max.apply(Math.max, Object.keys(GAME))) + 1; 
GAMELENGTH2 = (Math.max.apply(Math.apply, Object.keys(GAME))) + 1; 

GAMELENGTH3 = (Math.max.apply(null, Object.keys(GAME))) + 1; 

console.log(GAMELENGTH); 
console.log(GAMELENGTH2); 
console.log(GAMELENGTH3); 

的jsfiddle:http://jsfiddle.net/agx85sba/2/apply()方法的第一個參數參數數量

正是我應該什麼作爲apply()第一個參數使用?由於所有這些不同的GAMELENGTH都有相同的結果,但正在採取不同的參數。

+0

我傾向於在這些情況下使用'null'我自己。這是'this'的價值。 – Andy

+2

[閱讀文檔](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply)。無論這個「應該是什麼」。 – Xufox

+0

我傾向於使用0,它更短。 –

回答

1

fun.apply(thisArg, [argsArray])

thisArg

提供用於調用funthis的值。請注意,這可能不是該方法看到的實際值:如果該方法是非嚴格模式代碼中的函數,則null和undefined將被全局對象替換,並且原始值將被裝箱。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply


爲您的使用情況也不要緊。 Math.max的實際執行可能不在乎this

您可以使用apply獲取值列表的最大值,而無需將它們全部寫入函數調用(Math.max(1,2,3,4,5) vs var list = [1,2,3,4,5]; Math.max.apply(null, list))。

+0

投了票,但以'GAMELENGTH2 =(Math.max.apply(Math.apply,Object.keys(GAME)))+ 1;'爲例。 'Math.apply'被作爲參數發送,但沒有與之相關的值,那麼'this'仍然被傳遞? –

+0

你是什麼意思*這個'仍然被傳遞*怎麼樣? 'Math.apply'分配了一些東西(應用函數),並且在你應用它的函數內部是'this'。 – Rouby

+0

所以在第一個參數中,沒有數據被傳遞,它只是一個將它應用到第二個參數中的數組的函數? –

相關問題