Я большой поклонник ES5 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);
...уууххх теперь мой мозг немного болит. Я думаю, что теперь у меня есть представление о том, что происходит, но, пожалуйста, кто-нибудь найдет хорошие слова, чтобы объяснить это подробно.
{what: 'dafuq'}
становитсяthis reference