Вот приложение, на которое я ссылаюсь:
Я пытаюсь фундаментально понять метод связывания в Javascript.
Мое понимание, когда я играю св консоли то, что bind возвращает копию функции, причем «this» связано с тем, что вы передаете в bind.
function logThis(){
console.log(this)
}
logThis.bind({today: 'Tuesday'})
//Will return a copy of the logThis function, with 'this' set to the
{today:'Tuesday'} object. The code does not run right away though.
var explicitlyLogThis = logThis.bind({today: 'Tuesday'});
explicitlyLogThis(); //This will run the code and display the {today: 'Tuesday'} object to the console.
Это мое понимание до сих пор.Я понимаю, что на самом деле для запуска этой новой функции, которая явно привязана к «this» с помощью метода bind, вам нужно установить ее в переменную, а затем запустить ее.
Я вижу противоречие, когда смотрю на приложение по приведенной выше ссылке.Если вы посмотрите на метод bindEvents в строке 56, у нас есть .on ('keyup', this.create.bind (this)).Я понимаю, что мы должны установить 'this' в App, когда мы запускаем метод create, потому что jQuery по умолчанию устанавливает 'this' для самого объекта jQuery.Так что эта строка на самом деле такая же, как: $ ('# new-todo'). On ('keyup', App.create.bind (App)).
Не в этом мое замешательство.У меня такой вопрос:
Как именно эти копии функций с установленным для приложения «this» на самом деле вызывают?Приложение не устанавливает их в переменную, а затем вызывает эту переменную так, как я это делал, когда работал в консоли.
Он просто вызывает связанные функции напрямую, как только событие происходит с одним из элементов jQuery.Но я подумал, что если написать это так, то просто верну копию функции, а не саму функцию, если я основываю свои предположения на том, что я понял в коде, который я написал выше.Я подумал, что для немедленного вызова функции вам нужно будет использовать call или apply.
Я также понимаю, что приложение запускает метод bindEvents при запуске (см. Строку 46).Поэтому я понимаю, что когда вы запускаете приложение, копии различных функций создаются с правильным «this», связанным с функциями.Но ... когда / как они на самом деле вызываются без назначения их переменным?Как получить доступ к этим копиям?
Я думаю, что у меня есть ошибочное понимание метода привязки, поэтому я хотел бы немного помочь.Спасибо!