Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Это нормальный стиль кода или нет? (https://javascript.ru/forum/misc/80487-ehto-normalnyjj-stil-koda-ili-net.html)

micscr 11.06.2020 08:54

Это нормальный стиль кода или нет?
 
Приветствую.
Вот в доках пишут:
Цитата:

Обработчики действий получают объект контекста, содержащий те же методы и свойства, что и сам экземпляр хранилища, так что вы можете вызвать context.commit
const store = new Vuex.Store({
  state: {
    count: 0
  },
  actions: {
    increment(context) {               // Вот 
      context.commit('increment'); // про этот код
    }
  }
});


Теперь смотрю как этот код переделали в одном примере

actions: {
    addToFavs({commit}, movie) { 
      commit("ADD_AS_FAVORITE", movie)
    },


Я так понял что это он воспользовался деструктуризацией объекта, и вытянул с того объекта context его метод commit. И оно работает.
Зачем - не знаю, может для экономии пары символов.
Или так поступать - обычный прием?
Если так, то js код очень часто напоминает какой то шифр, который сначала требуется разгадывать, не против этого ли написаны такие книги как "Чистый код" Роберта Мартина?

SuperZen 11.06.2020 10:20

опытный глаз сразу разгадает загадку... про чистый код тоже можно долго спорить ) вот, например, посмотрим код битрикса, не знаю, может быть там что-то уже поменялось, не видел его лет 5, и видел я его два раза )... тем не менее даже такой код приносит много прибыли, в то время когда кто-то пытается писать чистый код и сидит на воде с хлебом... при чем тут это? ))

micscr 11.06.2020 14:04

Оно еще и this при этом теряет? Вообще жестяк.
А почему тут есть какой то this?
function User(name) {
  this.name = name;
  this.isAdmin = false;
  this.hello = function(){
    alert(typeof(this));
    alert(this.name);
  }
}

function checkThis({hello}) {
  hello();
}

let user = new User("Вася");
/*
1)
Выведет:
object
Вася
*/
//user.hello();

/*
2)
Выведет:
object
result
*/
checkThis(user);


Вот demo в работе

SuperZen 11.06.2020 15:16

чтобы this работал, нужно вызвать метод из объекта ), а не напрямую... или использовать .bind, .apply


Часовой пояс GMT +3, время: 20:00.