Arks
@Arks

Как избавиться от bind в javascript-либах?

Все чаще замечают что внутри функций пишу код вида
...
var a = _.bind(function(options){
...
this.somePropertyToChange = options.doSomething();
this.doSomething();
...
}, this)
...


Такие строчки становятся заменой простому static-binding на уровне var self = this все чаще при углублении цепочек. Но правильно ли это? Могут ли помочь promise или даже просто события/observer? Неужели в javascript все надо делать на событиях чтобы чувствовать себя комфортно и обеспечить переиспользование кода? Когда же писать линейный код а когда декомпозировать? Как обеспечивать правильный dispose событий?
  • Вопрос задан
  • 2472 просмотра
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Могут ли помочь promise или даже просто события/observer?

Чта? Это тут причем?

Неужели в javascript все надо делать на событиях

Опять же, чта? Почитайте... не знаю... про лямбда исчисления, функциональное программирование... При чем тут ивенты? В вашем примере мы явно задаем контекст функции посредством каррирования:

_.bind = function (fn, context) {
    
    return function () {
        return fn.apply(context, arguments);
    };    
};

Это позволяет нам внутри функции отвязаться от внешней области видимости и быть уверенным что у функции верный контекст. Вдруг вы решите потом поменять ваш self = this на self = undefined или сменить self на that... мало ли... Меньше связанности - больше счастья.

Когда же писать линейный код а когда декомпозировать?

Линейный там где нужен линейный код, а событийную модель - при взаимодействии с вводом/выводом, так как оно должно быть асинхронным. Вообще все эти замуты с колбэками и принципы по которым происходит "декомпозиция" учитывают такую штуку как event-loop. В любом случае это не относится к предмету вопроса из заголовка.

Разберитесь с тем как работает javascript и будет вам счастье.

p.s. А вы на чем пишите что такие вопросы задаете? Удовлетворите мое любопытство.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Arks
@Arks Автор вопроса
Вдруг вы решите потом поменять ваш self = this на self = undefined или сменить self на that... мало ли... Меньше связанности - больше счастья.

Это ответило на мой вопрос! Теперь еще больше bind-hell в коде!
Ответ написан
mlnkv
@mlnkv
JavaScript Developer
Почитайте что то толковое по js и может тогда у вас появится понимание.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы