@Programep

Как убрать зависимость от вызова метода одного модуля в событии другого javascript?

Добрый день! Собственно вопрос в заголовке. Подскажите, пожалуйста, как можно убрать зависимость в данном коде:
var globals = {choosed_letter:""};
var game_field = (function() {
    var /* code */; //private 
    return { //exposed to public
        get_choosed_fields: function(){
            /* code */
        },        
    } 
}());
var letters_field = (function() {
    var /* code */; //private 
    return { //exposed to public
        draw_field: function() {            
                symbolElement.onclick = function() {
                    /* code */                                          
                    /* убрать эту зависимость begin !!!*/
                    var choosed_fields = game_field.get_choosed_fields();                    
                    /* убрать эту зависимость end !!!*/                                        
                };
        }              
    } 
}());
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
@void01
Перенести блок /* code */ из первого объекта в symbolElement.onclick
ну и если в первом объекте есть необходимые в работе /* code */ переменные - перенести и их

в вашем примере два объекта, каждый из которых реализует по одной функции
get_choosed_fields и draw_field
второй объект при вызове draw_field подвешивает событие onclick DOM элементу symbolElement, которое в свою очередь пишет в переменную choosed_fields результат работы функции первого объекта.

можно либо как я уже писал перенести все тело функции из 1 в навешивание евента второго, либо перенести обе функции в 1 объект, тока код будет примерно таким
var letters_field = (function() {
    return { 
        get_choosed_fields: function(){
            /* code */
        },        
        draw_field: function() {        
        var self = this;  //это нужно для передачи текущего контекста в onclick 
                symbolElement.onclick = function() {
                    var choosed_fields = self.get_choosed_fields();                    
                };
        }              
    } 
}());
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
Brightdata Тель-Авив
от 5 500 до 6 500 $
Rocket Брянск
от 60 000 до 100 000 ₽
22 мая 2024, в 14:48
45000 руб./за проект
22 мая 2024, в 14:46
1111 руб./за проект
22 мая 2024, в 14:39
10000 руб./за проект