的困惑我是ES5的Function.prototype.bind
和currying參數(基本上爲函數創建默認參數)的狂熱粉絲。關於Function.prototype.bind()
我在那兒玩弄了一下,但是我不能在我的生活中找出自己的構造。這是我的遊樂場:
function hello(arg1, arg2) {
console.log('hello()');
console.log('"this" is: ', this);
console.log('arguments: ', arguments);
}
var foo = Function.prototype.call.bind(hello,{what: 'dafuq'}, 2);
foo(42);
此日誌輸出如下:
hello()
"this" is: Object{ what="dafuq" }
arguments: [2,42]
但我不知道如何在地球上{what: 'dafuq'}
對象做它的方式作爲this
內引用foo
。據我瞭解,我們正在創建一個約束呼叫到Function.prototype.call
。讓我們檢查MDN大綱爲.bind()
迅速:
fun.bind(thisArg[, arg1[, arg2[, ...]]])
因此,對於thisArg
是.call
的hello
功能,其次是參數列表。基本上會發生什麼事情是這樣的
Function.prototype.call.call(hello, {what: 'dafuq'}, 2);
...... uuhhh現在我的大腦有點疼。我想現在我有一個想法會發生什麼,但請有人找到很好的可靠單詞來詳細解釋它。
- 如何
{what: 'dafuq'}
成爲this reference
是'foo'是調用方法,但我們永遠不會調用'foo.call(thisArg)'對嗎?我們直接用'()'調用它。我不明白:p – jAndy 2012-08-01 14:16:03
@jAndy:你使用'.bind'將'.call'的第一個參數綁定到你的對象。因此,「.call」的這個「版本」有一個綁定的第一個參數,它總是將它用作調用上下文。 – 2012-08-01 14:16:39
'.call()'的綁定「版本」應該有'hello'作爲thisArg,否?之後,我們執行那個綁定的'.call()',只是傳遞正式參數。呃,好吧,可能我只是在這裏精神上受阻,還在計算它。 – jAndy 2012-08-01 14:21:45