Size: a a a

JavaScript Noobs — сообщество новичков

2020 September 20

DM

Denys Mikhalenko in JavaScript Noobs — сообщество новичков
суть в том, что когда ты делаешь new - ты создаешь конекст, или когда ты вызываешь obj.fn - происходит незаметный такой себе bind(ob)
но со стрелочными такой номер не прокатывает
источник

DM

Denys Mikhalenko in JavaScript Noobs — сообщество новичков
интересно, что обычную функцию можно перепривязывать к контексту сколько угодно раз, а стрелочную нельзя вообще
источник

DK

Dmitry Kudryavtsev in JavaScript Noobs — сообщество новичков
Denys Mikhalenko
суть в том, что когда ты делаешь new - ты создаешь конекст, или когда ты вызываешь obj.fn - происходит незаметный такой себе bind(ob)
но со стрелочными такой номер не прокатывает
Я понимаю, просто ты написал что обычная создает свой, но это не всегда
источник

DM

Denys Mikhalenko in JavaScript Noobs — сообщество новичков
Пожалуй ты прав
источник

DM

Denys Mikhalenko in JavaScript Noobs — сообщество новичков
Если просто вызвать ее как функцию, то не создает
источник

DM

Denys Mikhalenko in JavaScript Noobs — сообщество новичков
Все верно ты меня поправил, спасибо
источник

KP

Kotan 🐱 Pupkin in JavaScript Noobs — сообщество новичков
Denys Mikhalenko
интересно, что обычную функцию можно перепривязывать к контексту сколько угодно раз, а стрелочную нельзя вообще
ты про многократный bind? Насколько я помню, 1 раз можно сделать
источник

DM

Denys Mikhalenko in JavaScript Noobs — сообщество новичков
Kotan 🐱 Pupkin
ты про многократный bind? Насколько я помню, 1 раз можно сделать
var obj1 = { a: 1 }
var obj2 = { a: 2 }
var fn = function() { console.log(this.a) }
var bound = fn.bind(obj1)
var bound = fn.bind(obj2)
bound() // выводит 2
источник

KP

Kotan 🐱 Pupkin in JavaScript Noobs — сообщество новичков
я не про то
источник

DM

Denys Mikhalenko in JavaScript Noobs — сообщество новичков
тут прикол в том, что bind возвращает новую функцию просто 😂
источник

DM

Denys Mikhalenko in JavaScript Noobs — сообщество новичков
так то можно привязывать сколько хошь раз
источник

KP

Kotan 🐱 Pupkin in JavaScript Noobs — сообщество новичков
Denys Mikhalenko
тут прикол в том, что bind возвращает новую функцию просто 😂
в твоём случае ты перезатираешь первый результат
источник

DM

Denys Mikhalenko in JavaScript Noobs — сообщество новичков
bind не мутирует функцию потому что
источник

DM

Denys Mikhalenko in JavaScript Noobs — сообщество новичков
так что по факту можно делать сколько угодно раз, используя одну и ту же функцию, как основу
источник

KP

Kotan 🐱 Pupkin in JavaScript Noobs — сообщество новичков
const foo = { a: 1 };
const bar = { a: 2 };

function func() {
 console.log(this);
}

const boundOnce = func.bind(foo);
const boundTwice = boundOnce.bind(bar);

boundOnce();
boundTwice();

{ a: 1 }
{ a: 1 }
источник

KP

Kotan 🐱 Pupkin in JavaScript Noobs — сообщество новичков
Denys Mikhalenko
так что по факту можно делать сколько угодно раз, используя одну и ту же функцию, как основу
ну это да, я значит не так понял
источник

DM

Denys Mikhalenko in JavaScript Noobs — сообщество новичков
А ну да, мы тут не совсем друг друга поняли
источник

DM

Denys Mikhalenko in JavaScript Noobs — сообщество новичков
В твоей версии будет так
там сначала применится obj2, потом применится ob1, потом запустится функция и поэтому всегда останется obj1
источник

DM

Denys Mikhalenko in JavaScript Noobs — сообщество новичков
Все верно
источник

DM

Denys Mikhalenko in JavaScript Noobs — сообщество новичков
Получается, что стрелочная функция просто autobound :-)
источник