的困惑我是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