Ответы пользователя по тегу JavaScript
  • Компьютер не видит файл typescript?

    @f_ban
    Судя по всему, вам нужно скомпилировать TypeScript-файл в JavaScript.
    Скомпилируйте и запускайте приложение
    https://www.npmjs.com/package/gulp-tsc
    Ответ написан
    Комментировать
  • Третий параметр в функции setTimeout?

    @f_ban
    Начиная с 3-го параметра, это параметры, которые будут переданы функции-обработчику таймера.
    Вот здесь можете почитать https://learn.javascript.ru/settimeout-setinterval
    Ответ написан
    Комментировать
  • Как правильно сделать валидацию формы на клиенте и сервере?

    @f_ban
    Вызывайте функцию ajax() в обработчике submitHandler
    ...
    submitHandler: function(form) {
        ajax ()
     }
    ...


    Тогда будет работать такая логика...
    При сабмите валидной форми отправить форму на сервер, и если тот тоже все подтвердит, выполнить метод addData()

    Плюс ко всему саму форму можете передать методу ajax() в качестве параметра, тогда очистите логику обработки данных от логики работы с разметкой представления.
    Ответ написан
    Комментировать
  • Проверка обьекта на наличие ключей?

    @f_ban
    function isHasPropertyChain(obj, propertyChain){
      if(!(obj instanceof Object)) throw new TypeError("obj должен быть объектом");
      if((!(propertyChain instanceof Array)) && (!(typeof(propertyChain) === 'string'))) throw new TypeError("propertyChain должен строкой или массивом");
        
      var properties = (propertyChain instanceof Array)
          ? propertyChain
          : propertyChain.split('.');
    
      if (properties.length == 0) return false;
      
      var testedProp = properties[0];
      
      var res = (testedProp in obj);
    
      if(res){
       if((properties.length > 1)){
         return (obj[testedProp] instanceof Object) &&  isHasPropertyChain(obj[testedProp], properties.splice(1));
       }
      }
      
      return res;
    }
    
    function predicator(v){
      return !isHasPropertyChain(this, v);
    }
    
    var obj = {/* тестируемый объект */};
    
    absentKeys = keys.filter(predicator, obj);
    Ответ написан
    2 комментария
  • Как пределелать регулярное выражение из preg_replace PHP в javascript?

    @f_ban
    /\{([\s\S]*?)\}/ig
    А вот здесь поиграться и проверить регулярки можно https://regex101.com/r/XVyTpd/1
    Использовать в JS примерно так можно
    var message = "{aaa} ilcelcewpo {bbb} oisuodivuds {ccc}";
    var replace_to = '<img emoji="$1" class="ke ke-$1" src="img.png">';
    message = message.replace(/\{([\s\S]*?)\}/ig, replace_to);
    Ответ написан
  • Как запретить повторный вызов функции?

    @f_ban
    Объявите стиль:
    .avoid-clicks {
      pointer-events: none;
    }


    И добавляйте css-класс .avoid-clicks при первом клике и удаляйте, когда на кнопку уже можно будет нажимать.
    Ответ написан
    Комментировать
  • Что такое замыкание?

    @f_ban
    Другими словами, это такой механизм "замораживания" объектов, попавших в лексическое окружение замыкания. Сборщик мусора не удалит замороженое лексическое окружение до тех по, пока существует/используется объект-замыкание, имеющий ссылку на лексическое окружение.
    Ответ написан
  • Как лучше передать данные скрипту?

    @f_ban
    Попробуйте обработать событие onsubmit формы ( https://learn.javascript.ru/forms-submit ). А далее в обработчике вызовите метод submit() формы, ко гда будете уверены, что нужно форму отправлять ( htmlbook.ru/html/attr/onsubmit ), или же воспользуйтесь ajax'ом.
    Ответ написан
    Комментировать
  • Как различать методы и свойства в ооп?

    @f_ban
    Метод - функция, которая представляет собой значение свойства ( es5.javascript.ru/x4.html#x4.3.27 )

    Ну а раз уж мы выяснили что это функция, то...
    Функция - элемент типа Object, являющийся экземпляром стандартного встроенного конструктора Function, который может быть вызван в качестве подпрограммы. ( es5.javascript.ru/x4.html#x4.3.24 )

    ... а следовательно...
    function isFunction(obj){
      return (typeof(obj)) === "function";
    }


    Конкретно у вас, this.name - свойство объекта, создаваемого вызовом конструктора класса FirstClass. FirstClass.prototype.dataName - свойство объекта-прототипа класса FirstClass. Являются они методами или нет, можно выяснить вызовом выше описанной функции isFunction.

    Дело в том, что в спецификации ECMA Script 5 ( es5.javascript.ru ) нет понятия классов как таковых. Зато есть конструкторы объектов (оператор new) которому можно передать практически любую функцию, которая будет использована как функция конструктора. Функции имеют свойство prototype, которое используется для передачи "родительского" поведения и свойств потомкам. Такое наследование называется прототипным.
    При реализации наследования механизм таков. Свойство prototype по сути хранит в себе шаблон объекта, который будет получен при конструировании объекта вызовом оператором new. Есть одно но, свойства объекта из prototype родительского класса записываются не в свойства создаваемого объекта (точнее ссылка целиком на объект, на который ссылается prototype), а в его специальное свойство __proto__ (то есть добавляются в цепочку прототипов).
    Посмотри вот такой трюк.

    // Объявляем первый класс
    Class1 = function(name){this.name = name}
    Class1.prototype.family = "Super Class"
    
    // Объявляем второй класс
    Class2 = function(name){this.name = name;this.family = "Class";}
    // Именно так правильнее указывать родительский класс
    Class2.prototype = Object.create(Class1.prototype)
    
    o = new Class2("MyName");
    
    console.log(o.name);
    console.log(o.family);
    
    // Объект отказался от своего имени и фамилии
    delete o.name;
    delete o.family;
    
    // от имени и фамилии можно отказаться
    console.log(o.name);
    // но не от родовой метки :)
    console.log(o.family);


    Дело в том, что свойство family было удалено из объекта, но оно есть в объекте, на который ссылается свойство o.__proto__, следуя по цепочке прототипов интерпретатор находит свойство family и возвращает его значение
    Ответ написан
    5 комментариев
  • Как сделать такой элемент? (выбор категории и появление ее на экране - js)?

    @f_ban
    Про реализацию на JS...
    По сути требуется реализация шаблона интерфейса Master/Details.
    Так как пользуюсь/люблю AngularJS, не могу не оставить такой ссылки https://angular.io/docs/ts/latest/tutorial/toh-pt2.html
    Ответ написан
    Комментировать
  • Как сделать подобное?

    @f_ban
    Конкретно в данном примере canvas использован. А если взять в общем, разобрашись с стандартами/спецификациями HTML5 (CSS, DOM, JS) + SVG, то можно и более изящное решение сделать, у которого внешний вид и поведение каждого визуализируемого объекта настраивается в таблице стилей и обработке событий и легко меняется в коде JS. Таким образом, не придется по каждому чиху переписывать код отрисовки (да и вообще с ним заморачиваться).
    Если же визуализируемых объектов будет многовато, то наверное все таки лучше канвас.
    Ответ написан
    Комментировать