Я большой поклонник 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