Как сделать так, чтобы один и тот же шаблон функции самовывоза Javascript выполнялся более одного раза в параллельном режиме без перезаписи значений? - PullRequest
1 голос
/ 12 апреля 2019

Я ищу решение ООП, чтобы один и тот же литерал / класс объекта выполнялся параллельно или во вложенном виде, не мешая переменным других экземпляров.

Я создал демо в jsfiddle с несколькими кнопками для отображения желаемой функциональности, я попытался передать идентификатор для независимого вызова действий setTimeout, но я понимаю, что все переменные также совместно используются разными экземплярами

(function( skillet, $, undefined ){
  var t;
  var timer_is_on = 0;
  var startingPoint = 0;
  var endingPoint = 99;
  var timerLapse = 1000;
  var timerMatrixIndex = 0;
  var timerMatrix = [1000];
  var callback;

  function timedCount(timerLapse) {
    console.log(timerMatrix[timerMatrixIndex]);
    if (startingPoint > endingPoint || timer_is_on === 0) {
      clearTimeout(t[timerId]);
      skillet.stopCount();
    } else {
      document.getElementById("txt").value = startingPoint;
      if (timerMatrixIndex+1 < timerMatrix.length) {
        timerMatrixIndex++;
      }  
      startingPoint++;
      callback();
      t = { timerId: setTimeout( function() {timedCount(timerMatrix[timerMatrixIndex]);} ,timerLapse) }; 
    }
  }

  skillet.startCount = function(options) {
    options = options || {}; 
    startingPoint = options.startingPoint || 0; 
    endingPoint = options.endingPoint || 100;
    timerMatrix = options.timerMatrix || [1000];//[ 25,25,50,50,50,100,100,100,150,150,200,200,300,400,500,600,700,800,1000 ];
    timerId = options.timerId || 0;
    callback = options.callback || function(){};
    timerMatrixIndex= 0 ;

    if (!timer_is_on) {
      timer_is_on = 1;
      timedCount(timerMatrix[0]);
    }
  }

  skillet.stopCount = function() {
    clearTimeout(t[timerId]);
    timer_is_on = 0;
  }
}( window.skillet = window.skillet || {}, jQuery ))

Я ищу элегантный способ, не просто добавив myid ко всем методам или свойствам, возможно, я должен был создать класс вместо литерала объекта, а просто изучаю Javascript OOP.

Это простой способ сделать это?

https://jsfiddle.net/phrad/ut4yde9p/1/

Как и в примере, «количество обратных вызовов myid» должно быть независимым от других экземпляров с использованием значения по умолчанию (без идентификатора)

Прямо сейчас каждый вызов обнуляет параметры предыдущего вызова

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...